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