2011-11-30 56 views
-2

可以調用這些語句嗎?這些陳述在目標C中是否正確?

[self release]; 

[super release]; 

[AClass release]; 
+0

AClass本身就是一個類名,而不是一個類實例。 [AClass release]不會導致任何編譯器錯誤或警告。 –

回答

1
[self release] 

當一個對象初始化失敗實際上是鼓勵。這背後的原因主要是:在另一方面

if (self = [super init]) 

self = [super init]; 
if (self) 

[AClass release] 

似乎調用元類,其中有沒有任何影響的實例。

謝謝Josh Caswell指出我的錯誤。

最後

[super release] 

應該工作酷似

[self release] 
因爲這兩個

將調用NSObject中的釋放方法。

+2

一個類對象實際上是它的元類的一個實例,它採用'NSObject'協議(聲明'release')。這是一個有效的陳述,雖然毫無意義(它們也是不朽的)。 –

+0

你說得對。我認爲調用類的釋放會嘗試調用類方法,而不是那個實例的方法。 –

1

Apple sample code包含[super release]

而且有Apple documentation,其包括包含[self release]代碼示例。

這些構建體可以是當有用對象初始化不會成功。

第三配方([AClass release])你問好像它會導致錯誤發生,雖然。