2012-01-30 18 views
0

我已經看到了蘋果的Singleton和其他一些例子。 人們說這太嚴格了!我們什麼時候在Apple的Singleton例子中爲ivars創建內存?

但重點是......即使它太嚴格了,我也想理解它。 我不明白,當我們在super上調用allocWithZone時會發生什麼?

將根據super的實例大小創建內存。

如果我們的Singleton有ivars會怎麼樣?

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

我也是不明白的是,爲什麼allocWithZone返回的對象與保留通話保留本身返回對象,因爲它是什麼時候。

回答

1

每當在Obj-C中調用某個方法時,都會通過隱藏參數self傳遞一個對象引用。對於實例方法self引用方法被調用的對象,因爲類方法self引用該方法被調用的類對象(類型爲Class)。致電super隱含通過self

因此,在蘋果的示例代碼調用[super allocWithZone:NULL]調用超級實施allocWithZone合格self的電流值,這是MyGizmoClass的類的對象,因爲它是一個靜態方法。 allocWithZone的實現可以從傳遞的Class對象中確定所需的內存大小 - 私有的詳細信息。

正如您已經正確地發現,allocWithZoneretain的呼叫是毫無意義的,但無害。

相關問題