我们什么时候在Apple的Singleton示例中为ivars创建内存?

时间:2012-01-30 15:31:05

标签: objective-c

我已经看过Apple的Singleton示例以及其他几个示例。 人们说这太严格了!

但重点是..即使它太严格,我也想明白它。 我不明白,当我们在super上调用allocWithZone时,会发生什么?

将根据超级实例的大小创建内存。

如果我们的Singleton有ivars怎么办?

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32

我也不明白,为什么allocweithZone在保留自身的情况下返回对象并保留调用。

1 个答案:

答案 0 :(得分:1)

每当在Obj-C中调用一个方法时,它就会通过隐藏参数self传递一个对象引用。对于实例方法,self指的是调用该方法的对象,对于类方法self指的是调用该方法的类对象(类型Class)。致super的来电隐含地传递了self

因此,在Apple的示例代码中,调用[super allocWithZone:NULL]调用allocWithZone的超级实现,传递self的当前值,这是MyGizmoClass的类对象,因为它是静态方法。 allocWithZone的实现可以从传递的Class对象中确定所需的内存大小 - 私有方式的详细信息。

正如您所发现的那样,retainallocWithZone的来电毫无意义,但无害。