在我们之前的学习里, 我们创建对象的时候都是用new方法, 其实在实际开发中,new是不太正规的写法, 写的太死了, 很有局限性, 所以我们得另寻方法解决, 让我们一起来看看吧~~~
例子:
#import <Foundation/Foundation.h> @interface Person : NSObject @end @implementation Person @end int main() { Person *p1 = [Person new]; Person *p2 = [[Person alloc]init]; return 0; }
其实我们把new方法拆分之后, 就等于下面那一句, " alloc init ", 这么写相对于new方法来说会更加的灵活,alloc我们就不用看了, 是分配空间, 重点在init, 初始化的时候, 聪明的朋友应该想到了, 这么写, 那么在init的时候就可以初始化数值了.
但是在重写init的时候需要注意一件事情:
#import <Foundation/Foundation.h> @interface Person : NSObject @property int age; @end @implementation Person - (id)init { self = [super init]; if (self != nil) { _age = 10; } return self; } @end int main() { Person *p1 = [Person new]; Person *p2 = [[Person alloc]init]; return 0; }
必须得写上self = [super init]这句, 关于深层的原理我们暂时不要去问为什么, 以后我们写重构方法, 就只有按照上面例子的几个写法, 等熟练了之后, 我们再详细说更深层次的原理.
PS: self = [super init]; 是初始化父类中声明的成员变量, 并且赋给self, 只有self != nil的时候, 那么就代表初始化成功, 再进行下一步的初始化, 最后在返回.
但是在C语言中, 我们知道在判断语句了不写判断条件, 默认就是 "不等于", 那么我们可以改改:
- (id)init { if (self = [super init]) { _age = 10; } return self; }
更加简单的就可以完成重构方法了~~
构造方法:用来初始化对象的方法,是个对象方法,-开头
重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值
重写构造方法的注意点
1.先调用父类的构造方法([super init])
2.再进行子类内部成员变量的初始化
好了, 这次我们就讲到这里, 下次我们继续~~~