本帖最后由 微雨独行 于 2014-9-28 09:35 编辑
自己总结整理了一下关于OC中类方法和对象方法的区别,难免有所遗漏,现拿出来献丑,请各路大神审阅,如有补充,不胜感激!
1、基本概念 由对象来调用的方法称为对象方法。
直接可以用类名来执行(调用)的方法(类本身会在内存中占据存储空间,里面包含有类\对象方法的列表)称为类方法。 注:不是只有类方法列表存储在类的空间,对象方法列表也存储在类的空间。 很好理解,因为不管是类方法还是对象方法,它们的声明都在@interface @end之间 ;实现都在@implementation @end之间。 2、类方法和对象方法对比 (1) 对象方法 1> 以减号 - 开头 2> 所有数据类型(返回值、参数)都必须写在小括号()里面,而且只有数据类型可以写在小括号()里面; 3> 方法名遵循驼峰原则; 4> 如果没有参数,方法名后面什么都不写,例如 - (void)lookMyPhone; 5> 一个参数对应一个冒号 : ,冒号 : 也是方法名的一部分; 例如:- (void)sendMessage: (char *)message withPhoneNumber: (char *)number; 方法名是 sendMessage:withPhoneNumber: 6> 减号 - 不是方法名的一部分 7> 只能让对象调用,没有对象,这个方法根本不可能被执行; 8> 对象方法可以访问实例变量(成员变量); 9> 对象方法既可以调用对象方法,也可以调用类方法。 (3) 类方法 1> 以加号 + 开头 2> 所有数据类型(返回值、参数)都必须写在小括号()里面,而且只有数据类型可以写在小括号()里面; 3> 方法名遵循驼峰原则; 4> 如果没有参数,方法名后面什么都不写,例如 + (void)lookMyPhone; 5> 一个参数对应一个冒号:,冒号:也是方法名的一部分; 例如:+ (void)sendMessage:char *)message withPhoneNumber:(char *)number; 方法名是 sendMessage:withPhoneNumber: 6> 加号 + 不是方法名的一部分。 7> 类方法只能用类名调用,对象不能调用 8> 类方法不能访问实例变量(成员变量) 9> 使用场合:当不需要访问成员变量的时候,尽量使用类方法 10> 类方法可以调用自己的类方法,但不能调用自己,会出现死循环。 11> 类方法可以作为工具方法。 (3) 类方法可以和对象方法重名(即方法名完全一样),但是二者却是两个完全不同的方法,用方法前面的+ -号区别。 此处个人感觉需要注意的是:对象 和 对象方法 是不同的概念 (1)对象方法只能让对象调用;类方法只能让类名调用。 (2)对象不能调用类方法,但是对象方法可以调用类方法(这一点初学时容易迷糊) 3、使用场合不同 (1)当方法中需要访问实例变量(成员变量)的时候,一定不能使用类方法,只能使用对象方法; (2)当方法中不需要访问实例变量(成员变量)的时候,类方法和对象方法都可以使用,但是尽量使用类方法;因为使用类方法可以节省内存,提高效率。 4、类方法和对象方法之间调用的区别 (1) 类方法调用自己的类方法 可以 (2) 类方法调用自己的对象方法 不可以 (3) 对象方法调用自己的类方法 可以 (4) 对象方法调用自己的对象方法 可以 注:类方法在调用类方法的时候,不能调用自己,会出现死循环。
|