Object-c基础编程学习笔记-对象初始化
2014-08-30 12:43
381 查看
1、对象分配
alloc方法,做了两件事:一件是为类分配一块足够大内存,以存放该类的全部实例变量;另一件事就是,将这块区域中的所有实例变量初始化为0(BOOL初始化为NO,对象初始化为nil)
init方法,从OS中取得一块内存,准备用于存储对象。init几乎总是返回他们正在初始化的对象。
在这里,笔者有一个疑问,既然alloc方法已经为对象分配空间并初始化为0了,那为什么仍然要调用init。看了一些论坛,他们说init负责将对象初始化为0,难道我的书是盗版的?于是我写了一个程序,对于对象,只alloc,而不进行init,然后打印一个int的成员变量,结果是0,很显然,alloc已经初始化了。于是我找到了apple的官网,看到了如下的描述:
Discussion
The
You must use an
Do not override
For historical reasons,
这里,主要看倒数第二行,我想原因应该是,alloc虽然初始化了,但是,我们并不可以复写它,而init则是可以复写的。在这里,如果有朋友有不同的解释和意见,希望可以在留言中提出。
刚才进入到了init方法,进一步证实了我的想法
An object isn’t ready to be used until it has been initialized. The
In a custom implementation of this method, you must invoke super’s
designated initializer then initialize and return the new object. If the new object can’t be initialized, the method should return
2、在你自己的初始化方法中,需要调用自己的指定的初始化方法或者超累的指定初始化函数。一定要将超类的初始化函数的赋值给self对象,并返回你自己的初始化方法的值。超类可以决定,并返回一个完全不同的对象。
alloc方法,做了两件事:一件是为类分配一块足够大内存,以存放该类的全部实例变量;另一件事就是,将这块区域中的所有实例变量初始化为0(BOOL初始化为NO,对象初始化为nil)
init方法,从OS中取得一块内存,准备用于存储对象。init几乎总是返回他们正在初始化的对象。
Car *car = [[Car alloc]init];与
Car *car = [Car alloc]; [car init];这里一定要使用嵌套,因为初始化的对象,与分配的对象,可能不同
在这里,笔者有一个疑问,既然alloc方法已经为对象分配空间并初始化为0了,那为什么仍然要调用init。看了一些论坛,他们说init负责将对象初始化为0,难道我的书是盗版的?于是我写了一个程序,对于对象,只alloc,而不进行init,然后打印一个int的成员变量,结果是0,很显然,alloc已经初始化了。于是我找到了apple的官网,看到了如下的描述:
Discussion
The
isainstance variable of the new instance is initialized to a data structure that describes the class; memory for all other instance variables is set to
0.
You must use an
init...method to complete the initialization process. For example:
TheClass *newObject = [[TheClass alloc] init]; |
allocto include initialization code. Instead, implement class-specific versions of
init...methods.
For historical reasons,
allocinvokes
allocWithZone:.
这里,主要看倒数第二行,我想原因应该是,alloc虽然初始化了,但是,我们并不可以复写它,而init则是可以复写的。在这里,如果有朋友有不同的解释和意见,希望可以在留言中提出。
刚才进入到了init方法,进一步证实了我的想法
An object isn’t ready to be used until it has been initialized. The
initmethod defined in the
NSObjectclass does no initialization; it simply returns
self.
In a custom implementation of this method, you must invoke super’s
designated initializer then initialize and return the new object. If the new object can’t be initialized, the method should return
nil.
2、在你自己的初始化方法中,需要调用自己的指定的初始化方法或者超累的指定初始化函数。一定要将超类的初始化函数的赋值给self对象,并返回你自己的初始化方法的值。超类可以决定,并返回一个完全不同的对象。
相关文章推荐
- Object-c基础编程学习笔记-对象初始化
- Object-c基础编程学习笔记-NSString
- Object-c基础编程学习笔记-协议
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十章 对象初始化
- Objective-C基础学习笔记——对象初始化
- Object-c基础编程学习笔记-集合
- Java面对对象编程---学习笔记(JAVA语言基础)
- Object-c学习笔记(一):对象的声明及初始化
- Objective-C基础教程学习笔记(十)对象初始化
- Object-c基础编程学习笔记-源文件组织,XCODE新功能
- Object-c基础编程学习笔记-分类
- Object-c基础编程学习笔记-NSPredicate
- Object-c基础编程学习笔记-键值编码
- Java基础学习笔记--对象的初始化
- T-SQL基础--chp10可编程对象学习笔记[下]
- Object-c基础编程学习笔记-各种数值
- Object-c基础编程学习笔记-内存管理
- Object-c基础编程学习笔记-Foundation
- Object-c基础编程学习笔记-C的扩展
- Object-c学习笔记十一-----对象初始化