我已經看到了蘋果的Singleton和其他一些例子。 人們說這太嚴格了!我們什麼時候在Apple的Singleton例子中爲ivars創建內存?
但重點是......即使它太嚴格了,我也想理解它。 我不明白,當我們在super上調用allocWithZone時會發生什麼?
將根據super的實例大小創建內存。
如果我們的Singleton有ivars會怎麼樣?
我也是不明白的是,爲什麼allocWithZone返回的對象與保留通話保留本身返回對象,因爲它是什麼時候。
我已經看到了蘋果的Singleton和其他一些例子。 人們說這太嚴格了!我們什麼時候在Apple的Singleton例子中爲ivars創建內存?
但重點是......即使它太嚴格了,我也想理解它。 我不明白,當我們在super上調用allocWithZone時會發生什麼?
將根據super的實例大小創建內存。
如果我們的Singleton有ivars會怎麼樣?
我也是不明白的是,爲什麼allocWithZone返回的對象與保留通話保留本身返回對象,因爲它是什麼時候。
每當在Obj-C中調用某個方法時,都會通過隱藏參數self
傳遞一個對象引用。對於實例方法self
引用方法被調用的對象,因爲類方法self
引用該方法被調用的類對象(類型爲Class
)。致電super
隱含通過self
。
因此,在蘋果的示例代碼調用[super allocWithZone:NULL]
調用超級實施allocWithZone
合格self
的電流值,這是MyGizmoClass
的類的對象,因爲它是一個靜態方法。 allocWithZone
的實現可以從傳遞的Class
對象中確定所需的內存大小 - 私有的詳細信息。
正如您已經正確地發現,allocWithZone
中retain
的呼叫是毫無意義的,但無害。