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) 类方法可以和对象方法重名(即方法名完全一样),但是二者却是两个完全不同的方法,用方法前面的+ -号区别。
3、使用场合不同
(1)当方法中需要访问实例变量(成员变量)的时候,一定不能使用类方法,只能使用对象方法;
(2)当方法中不需要访问实例变量(成员变量)的时候,类方法和对象方法都可以使用,但是尽量使用类方法;因为使用类方法可以节省内存,提高效率。
4、类方法和对象方法之间调用的区别
(1) 类方法调用自己的类方法 可以
(2) 类方法调用自己的对象方法 不可以
(3) 对象方法调用自己的类方法 可以
(4) 对象方法调用自己的对象方法 可以
注:类方法在调用类方法的时候,不能调用自己,会出现死循环。