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
- Objective - C基础: 第四天 - 2.重写init方法
- Objective-c - 构造方法(init方法)和init方法的重写
- Objective - C基础: 第四天 - 3.自定义构造方法
- Objective - C基础: 第四天 - 9.description方法
- Objective-C中,重写init方法为什么要self = [super init]?
- Objective-C中,重写init方法为什么要self = [super init]
- Objective-C学习笔记(二十二)——初始化方法init的重写与自定义
- Objective-C 重写set方法
- objective-c init方法的写法
- Objective - C基础: 第四天 - 6.类的本质
- Objective - C基础: 第四天 - 7.类的加载过程
- Objective - C基础: 第四天 - 8.类别的加载过程
- Objective-c 重写 isEqual 和 hash 方法
- iOS Objective-C 重写 setter 方法
- Objective-C中方法的重写
- 学习笔记(objective-c)-重写description方法
- 学习笔记(objective-c)-重写isEqual方法
- objective-c 第四天 字典
- HTML----常用HEAD头标
- C/C++assert 断言
- 【设计模式】单例模式
- html小技巧
- zoj 1642 Match for Bonus
- Objective - C基础: 第四天 - 2.重写init方法
- Kinetis SRAM
- 基础MySQL语句
- PPP和PPPoE的工作原理
- bash中 2>&1 & 的解释
- redis各种类型的存储情况分析
- Android下拉菜单Spinner控件
- 引入模板模式重构FtpClientUtil
- 材质模型