我已经看过Apple的Singleton示例以及其他几个示例。 人们说这太严格了!
但重点是..即使它太严格,我也想明白它。 我不明白,当我们在super上调用allocWithZone时,会发生什么?
将根据超级实例的大小创建内存。
如果我们的Singleton有ivars怎么办?
我也不明白,为什么allocweithZone在保留自身的情况下返回对象并保留调用。
答案 0 :(得分:1)
每当在Obj-C中调用一个方法时,它就会通过隐藏参数self
传递一个对象引用。对于实例方法,self
指的是调用该方法的对象,对于类方法self
指的是调用该方法的类对象(类型Class
)。致super
的来电隐含地传递了self
。
因此,在Apple的示例代码中,调用[super allocWithZone:NULL]
调用allocWithZone
的超级实现,传递self
的当前值,这是MyGizmoClass
的类对象,因为它是静态方法。 allocWithZone
的实现可以从传递的Class
对象中确定所需的内存大小 - 私有方式的详细信息。
正如您所发现的那样,retain
中allocWithZone
的来电毫无意义,但无害。