OC中的类方法与实例方法

神马是类方法和实例方法?
  Objective-C中的类可以声明两种类型的方法:类方法和实例方法。 类方法,也称静态方法,是指属于某个类的方法,此方法属于类本身,不属于类的某一个实例(对象)。实例方法是指属于某一个实例的方法,必须首先创建类的一个实例以后才可以调用实例方法,每个实例(对象)都有自身的实例方法,互相独立,不共享。在语法上,+表示类方法,类似于c语言的static关键字,-表示是实例(对象)方法。

调用

类方法

  调用方式有三种:可直接调用、类名.方法名、对象名.方法名。

实例方法

  调用方式只能是对象名.方法名。

注意: 
1、类方法可以调用类方法。
2、类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
3、类方法不可以使用实例变量(静态数据成员可以访问),但类方法可以使用self,因为self不是实例变量。

关于类方法和实例方法的一些误区:
1、类方法常驻内存,实例方法不是,所以类方法效率高但占内存。
事实上,方法都是一样的。在加载时机和占用内存上,类方法和实例方法是一样的,在第一次被使用时加载,调用的速度基本上没有差别。
2、静态方法在堆上分配内存存放,实例方法在堆栈上存放。
事实上所有的方法都不可能存在于堆或者堆栈上,方法作为代码是被加载到特殊的代码内存区域,即代码区,而且代码区是只读的。

附一道面试题:调用一个类的静态方法需不需要release?(内存管理)

  静态成员方法不需要对象,不需要release。其实静态成员方法也是有对象的,叫做类对象,但这个是在第一次访问类成员时将其加载到内存的,而且该类对象只在程序关闭时才会释放,并不由程序本身控制。
  有三个概念要分清:类、实例和对象,类本身加载到内存(可能是代码段的内存,不是堆内存,也不是栈内存),可以叫做一个对象;创建一个类的实例,这个实例可以叫做一个对象,所以就有类对象和实例对象之分了,类对象就是一张图纸,实例对象是按类对象造出的一橦楼,确实都是实实在在存在的东西,所以叫对象,只不过性质不同,一个是图纸,一个是按图纸造出来的楼房。

你可能感兴趣的:(IOS)