iOS-类方法和实例方法

类方法

  • 类方法也叫静态方法或工厂方法
  • 在声明(.h)和实现(.m)中函数以 + 开头
  • 在应用程序开始运行时一直驻于内存,所以可直接通过类名进行引用该方法:[UIColor whiteColor]
  • 调用类方法速度很快,但会占用内存,适合整个应用程序中频繁调用的方法
  • 类方法一般用于实现一些工具方法,比如对某个对象进行扩展,或者实现单例等
  • 类方法内部可以通过self调用自己的类方法
  • 类方法内部不可以通过self来调用自己的实例方法,需要通过创建一个自己的实例对象来访问自己的实例方法
  • 类方法内部不可以通过self来访问自己的属性如self.iconImageArr
  • 在类方法中要访问自己的属性,必须要在类中实例化一个对象,然后再调用,但是都要调用实例属性了,为什么使用实例方法呢?
  • 注意:静态内存是有限制的且是连续存放,过多占用会导致程序无法启动
实例方法
  • 实例方法也叫动态方法或对象方法
  • 在声明(.h)和实现(.m)中函数以 - 开头
  • 需要创建类的实例后才能引用该方法:[[NSUserDefaults standardUserDefaults] objectForKey:@"..."]
  • 实例方法调用动态分配内存,调用完成后会释放内存,节省内存,但调用速度较类方法慢
  • 同样的,实例方法内部可以通过self调用实例方法
  • 实例方法内部不可以通过self调用类方法,可以使用[self class]来调用类方法
在实例方法中self是object,而在类方法中self是class,所以在两种方法内部无法通过self来相互调用,self只能调用相同类型的方法。
【iOS-类方法和实例方法】如果一个方法与类的实例无关(该方法内部就是不会访问自己的属性,不会调用实例方法),那么就可以写成类方法。
实际上可以把所有的实例方法都写成类方法,只需要将实例作为参数传入,这样类方法内部可以访问属性和调用实例方法。
但我们还是应该从函数功能作用出发来决定该使用哪种方法。这应该是深思熟虑的结果。

    推荐阅读