小知识补充
一、 id
1. 简介
万能指针,能指向任何OC对象,相当于NSObject *
id类型的定义
typedef struct objc_object { Class isa; } *id;
2. 使用
// 注意:id后面不要加上*
id p = [Person new];
3. 局限性
调用一个不存在的方法,编译器会马上报错
二、 .h和.m文件的抽取
1)每个类分布在不同文件中
2)类的声明放在.h文件,类的实现放在.m文件
3)若想使用某个类,就包含某个类的.h声明文件
三、 init方法补充(重点)
1. 对象创建原理
new的拆分两部曲
u 分配内存(+alloc)
u 初始化(-init)
Person *p1 = [Person alloc]; Person *p1 = [p1 init]; 合成一句后: Person *p = [[Person alloc] init];
2. init方法的重写
l 想在对象创建完毕后,成员变量马上就有一些默认的值
l init方法的重写过程
- (id)init {// 1.一定要调用super的init方法:初始化父类中声明的一些成员变量和其他属性// self = [super init]; // 当前对象 self// 2.如果初始化成功,才有必要进行接下来的初始化 if (self = [super init]) { // 初始化成功 _age = 10; } return self; // 3.返回一个已经初始化完毕的值 }
3.自定义构造方法
l 构造方法的一些规范
-
- (id)initWithAge:(int)age { if (self = [super init]) { _age = age; } return self; }
传递多个参数进行初始化
- (id) initWithAge:(int)age andNo:(int)no;
返回值是id类型
- 方法名都以init开头
时间: 2024-10-04 01:00:21