1. OC中的方法分两种.
-> 对象方法/实例方法: 我们之前学习到的方法就叫做对象方法.
对象方法必须使用对象名来调用.
也就是说,想要去调用对象方法 就必须要创建1个对象.
-> 类方法: 类方法的调用不依赖于对象,而是依赖于类.
要调用类方法 不需要创建对象 而是直接通过类名就可以调用.
2. 声明
1). 对象方法的声明使用一个 - 号
- (void)sayHi;
2). 类方法的声明使用一个 + 号.
+ (void)classMethod;
3. 调用
1). 要调用对象方法就必须要创建1个对象,通过对象名来调用.
[对象名 对象方法名];
2). 要调用类方法,不需要创建对象. 直接使用类名可以调用.
[类名 类方法名];
需要注意的是. 对象方法只能通过对象名来调用.
类方法只能通过类名来调用.
3. 类方法的特点:
1). 节约空间: 因为类方法的调用不需要创建对象.
而对象方法的调用还要首先创建1个对象.
2). 提高效率: 类方法的调用.直接找到代码区中的类,找到类中的类方法执行.
对象方法要先通过指针找到对象,再通过对象的isa指针找到类.再找到类中的方法执行.
4. 类方法的局限性
在类方法中无法直接访问类的属性.
也不能通过self关键字去调用当前类的对象方法.
因为类方法的调用不需要创建对象的. 而属性只有对象创建了以后才有.
所以,类方法在执行的时候,对象有可能还没有呢.对象都没有 如何访问属性呢?
同样的原理;在类方法执行的时候,还没有对象,而对象方法的调用必须要依赖于对象来调用.
所以.在类方法中不能直接使用self调用当前类的.对象方法.
5. 什么时候,我们需要将方法定义为类方法呢?
如果我们的方法不需要访问属性.也不需要直接调用当前类中的对象方法.
那么就可以将这个方法定义为类方法,来节约空间提高效率.
6. 注意的几个问题
1). 对象方法之间是不能重名的.
2). 类方法之间也是不能重名的.
3). 类方法和对象方法可以同名.
如果通过类名来调用,那么调用的就是类方法.
如果通过对象来调用,那么调用的就是对象方法.
4). 对象方法只能通过对象来调用.
类方法只能通过类来调用.
5). 类方法中虽然不能直接访问属性和调用对象方法
但是.可以创建1个对象,访问这个对象的属性和对象方法.
6). 类方法中不能直接调用当前类的对象方法.除非创建1个对象,通过这个创建的对象调用.
在对象方法中可以直接使用类名来调用类方法.
7. 类方法的规范.
1). 我们写1个类 就要为这个类提供1个和类名同名的类方法.这个类方法来返回1个纯洁的对象.
纯洁的对象: 对象的属性的值都是默认值.
这个时候,如果想要得到这个类的对象,也可以直接调用这个同名的类方法来创建1个对象.
+ (HMPerson *)person
{
HMPerson *p1 = [HMPerson new];
return p1;
}
2). 如果希望创建出来的对象的属性的值是由创建者指定的.
那么这个时候,就可以为这个类方法带参数. 在方法内部创建对象. 并初始化对象的属性.
返回.
+ (HMPerson *)personWithName:(NSString *)name andAge:(int)age
{
HMPerson *p1 = [HMPerson new];
p1->_name = name;
p1->_age = age;
return p1;
}
8. 对象的创建.
HMPerson *p1 = [HMPerson new];
new其实是1个类方法.
做的事情: 创建对象、初始化对象.
返回值: 返回创建的这个对象的地址.
|
|