[Objective-c 基础 - 2.7] 构造方法、重写init方法

A.id

万能指针,可以指向任何对象,实质是NSObject的指针,使用的时候不用加上*

B.NSObject中得类方法new

1.完整地创建一个可用对象步骤

(1)分配存储空间 + alloc

(2)初始化 - init

1         // 1.调用+alloc分配存储空间
2         Person *p1 = [Person alloc];
3         // 2.调用-init进行初始化
4         Person *p2 = [p1 init];
5         // 同时进行分配存储空间和初始化
6         Person *p3 = [[Person alloc] init];

(3)构造方法就是init方法

 1 @implementation Person
 2 
 3 // 重写-init方法
 4 - (id) init
 5 {
 6     // 1.一定要调用super的init方法
 7     self = [super init];// 当前对象self
 8    
 9     // 2.如果对象初始化成功,才能进行接下来的子类初始化
10     if (self != nil)
11     {// 初始化成功
12         self.age = 10;
13     }
14    
15     // 3.返回一个已经初始化的对象
16     return self;
17 }
18 
19 @end

简化:

1 - (id) init
2 {
3     if (self = [super init])//nil实际是0
4     {
5         self.age = 10;
6     }
7     return self;
8 }

C.自定义构造方法

 1 @interface Person : NSObject
 2 @property NSString *name;
 3 
 4 /*
 5  自定义构造方法的规范
 6  1.一定是对象方法,一定以-开头
 7  2.返回值一般是id类型
 8  3.方法名一般以init开头
 9 */
10 
11 - (id) initWithName:(NSString *) name;
12 
13 @end
14  
15 @implementation Person
16 
17 - (id) initWithName:(NSString *) name
18 {
19     if (self = [super init])
20     {
21         _name = name;
22     }
23    
24     return self;
25 }
26 
27 @end

原则:父类的成员变量交给父类的方法去处理

谁声明,谁处理