2011-10-24 157 views
2

我仍然在學習Objective-C,並且有一條規則,它不會直接直接釋放對象。我不明白這意味着什麼。直接釋放對象

能有人給我這個規律被打破的例子..

這裏是它是如何應該做。

正確的方式

-(id)someMethod { 
Class *object = [[Class alloc]init]; 
[object someMethod]; 
[object release]; 
} 

以上被認爲是正確的..

那麼,什麼是壞的方式?提前致謝。

回答

2

它永遠不會直接解除分配對象直接

這意味着,你不應該調用objectdeallocate方法直接:

-(void)someMethod { 
    Class *object = [[Class alloc]init]; 
    [object someMethod]; 
    [object release]; // <- it is correct 
    [object dealloc]; // <- error here! 
} 
+1

'S /解除分配/的dealloc /';-) – DarkDust

+1

我補充一點,方法是不正確的,因爲它必須返回一個ID,並且不返回任何 – Geoffroy

+0

非常感謝:) 所有三個這樣回答道,你是一個很大的幫助。現在我明白了。 – Heartbound07

1

不正確的方法是直接調用[object dealloc],這會破壞物體。一旦沒有人再保留它,它將被release調用。

4

從來沒有取消分配對象直接

這意味着你永遠不應該發送-dealloc消息直接對象 - 爲唯一有效的情況發送的dealloc在dealloc的實現進行超:

- (void)dealloc{ 
    ... 
    [super dealloc]; 
} 

還要注意,使用ARC(自動引用計數),即使在這種情況下也不應該調用dealloc。