Object-c基础编程学习笔记-对象初始化

1、对象分配

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 isa instance variable of the new instance is initialized to a data structure that describes the class; memory for all other instance variables is set to0.

You must use an init... method to complete the initialization process. For example:

TheClass *newObject = [[TheClass alloc] init];

Do not override alloc to include initialization code. Instead, implement class-specific versions ofinit... methods.

For historical reasons, alloc invokes allocWithZone:.

这里,主要看倒数第二行,我想原因应该是,alloc虽然初始化了,但是,我们并不可以复写它,而init则是可以复写的。在这里,如果有朋友有不同的解释和意见,希望可以在留言中提出。

刚才进入到了init方法,进一步证实了我的想法

An object isn’t ready to be used until it has been initialized. The init method defined in theNSObject class does no initialization; it simply returnsself.

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对象,并返回你自己的初始化方法的值。超类可以决定,并返回一个完全不同的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值