1.万能指针id
1.简介:
- 万能指针能指向任何OC对象,相当于NSObject *
- id类型的定义
typedef struct objc_object{ Class isa; // 类类型的指针 }*id;
2.使用:
id p = [Person new]; // 注意id 后面不要加 * 号
3.局限性:
调用一个不存在的方法,编译器会马上报错
2.构造方法
1.含义:
构造方法:用来初始化对象的方法,是一个对象方法,- 开头
2.对象创建原理
new的拆分两部曲:
- 分配内存(+ alloc): Person *p1 = [Person alloc]; // 调用类方法alloc分配内存
- 初始化(- init):Person *p2 = [p1 init]; // 调用init方法进行初始化
合在一起就是: Person *p2 = [[Person alloc] init];
3.init构造方法的重写
1.作用:为例创建对象出来,就初始化一些成员变量,成员变量就有默认值
2.init重写规则:
- (id)init { // 1.一定要调用super的init方法:初始化父类中声明的一些成员变量和其他属性 self = [super init]; // 当前对象 self // 2.如果对象初始化成功,就可以进行接下来的初始化 if (self != nil) // 即初始化成功 { _age = 10; } // 3.返回一个已经初始化完毕的对象 return self; }
3.自定义构造方法
- 需求和重写init方法差不多
- 规范:
1.一定是对象方法,一定以 - 开头
2.返回值一般是id类型
3.方法名一般以initWith开头
4.如果父类有构造方法,一定要调用super的initWith方法