Objective - C基础: 第四天 - 2.重写init方法

来源:互联网 发布:三力网络酒店客控 编辑:程序博客网 时间:2024/05/20 04:31

在我们之前的学习里, 我们创建对象的时候都是用new方法, 其实在实际开发中,new是不太正规的写法, 写的太死了, 很有局限性, 所以我们得另寻方法解决, 让我们一起来看看吧~~~


例子:

#import <Foundation/Foundation.h>@interface Person : NSObject@end@implementation Person@endint 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;}@endint 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.再进行子类内部成员变量的初始化




好了, 这次我们就讲到这里, 下次我们继续~~~

0 0
原创粉丝点击