对象创建及初始化
2014-10-23 21:54
113 查看
Objective - C有两种创建对象的不同方法:
1. [类名 new];2. [[类名 alloc]init];
这两种方法是等价的,不过,通常Cocoa 惯例是使用 alloc 和 init,而不是 new。
*分配对象(为对象分配内存)
/分配(allocation)是一个新对象诞⽣的过程。是从操作系统获得一块内存并将其指定为存放对象的实例变量的位置。向某个类发送alloc 消息的结果,就是为该类分配⼀块足够大的内存,以存放该类的全部实例变量。
/分配内存时,alloc
方法将这块内存区域全部初始化为0。所有的
BOOL 类型变量被初始化为
NO,所有的
int 类型变量被初始化为
0,所有的
float 类型变量被初始化为
0.0,所有的指针被初始化为
nil。
*初始化对象
/刚刚分配(alloc)的对象需要经过初始化(initialization)才能使⽤用Car *car = [ [Car alloc] init]; //right
V.S.
Car *car = [Car alloc];[car init] //wrong
/ 因为初始化方法返回的对象可能与分配的对象不同
为什么init⽅方法会返回不同的对象?
/ 诸如NSString和NSArray这样的类实际上是类簇,由于init方法可以接收参数,因此,其代码能检查接收的参数,并决定返回类簇中哪一个类的对象更合适。比如,参数是文本和参数是阿拉伯数字,返回的可能就是不同的类
*编写初始化方法
if (self = [super init]) {}
*便利初始化方法
/ 许多类包含便利初始化方法(convenience initializer),它们是用来完成某些额外工作的初始化方法,可以减少你完成这些工作的麻烦。-(id) initWithFormat: (NSString *) format, . . . ;
-(id) initWithContentOfFile: (NSString *) path;
*指定初始化方法
/ 指定初始化方法(designated initializer),指在类中出现2个或2个以上便利初始化方法时,把类中的某个初始化方法被指派为指定初始化方法。该类的所有初始化方法使⽤用指定初始化方法执⾏行初始化操作。子类使⽤其超类的指定初始化方法实现超类的初始化操作。 通常, 接受参数最多的初始化方法最终成为指定初始化方法。
*初始化方法规则
1. 如果不需要设置任何状态,则不需要为你⾃己的类创建初始化方法。其他的初始化方法使⽤指定初始化方法来实现。
2. 如果初始化方法不⽌一个,则需要选择一个作为指定初始化方法。
9af3
3. 如果创建了一个指定初始化方法,则一定要在你自己的指定初始化方法中调⽤超类的指定初始化方
法。其他的初始化方法使⽤指定初始化方法来实现。
相关文章推荐
- Java:对象创建和初始化过程 推荐
- Java中两种String对象创建和初始化方式比较
- day5 面向对象编程思想 面向对象编程的特点 对象的创建和初始化 方法的调用
- 创建对象在内存中都做了那些事情(对象初始化过程)
- Java:对象创建和初始化过程
- C# 3.0新特征之创建和初始化集合对象
- C# 3.0新特征之创建和初始化集合对象
- Java:对象创建和初始化过程
- 【翻译】eXpressAppFramework QuickStart 业务模型设计(八)——创建对象后初始化属性
- JAVA中对象创建和初始化过程
- java对象的创建与初始化
- [转]JAVA中对象创建和初始化过程
- C# 3.0新特征之创建和初始化集合对象
- C# 3.0新特征之创建和初始化集合对象
- JAVA中对象创建和初始化过程
- 创建和初始化SqlCmmand对象的方法
- Java小知识 对象创建和初始化过程,堆:栈区别
- JAVA中对象创建和初始化过程
- 一。对象管理第一次初始化(ObInitSystem) + 类型对象的创建(ObCreateObjectType)
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)