2010-11-16 57 views
0

我對對象c中的空閒對象內存有疑問。關於內存管理(通過接口生成器創建對象的規範)

例如代碼:

@interface myCell : UITableViewCell { 

    IBOutlet UIView* bindView; 

    IBOutlet UIView* unBindView; 

} 

正如你看到的,二對象,首先是分配,並通過Interface Builder的結合,另一個是在我的dealloc代碼沒有

,我嘗試釋放,以避免內存泄漏 。所以我做如下:

- (void)dealloc { 


    [bindView release]; 
    bindView = nil; 

    [unBindView release]; 
    unBindView = nil; 

    [super dealloc]; 
} 

所以,我認爲這將是免費的.....所有的代碼執行正確,但我奇怪的是,因爲第二個對象unBindView從來沒有在代碼或IB分配,這似乎應該是零,但代碼仍然可以執行無零指針異常拋出....

我的問題,是否我上面的自由對象代碼是正確的和最好的方式?因爲bindView從未被保留,我認爲應該由可可處理?下一個問題是關於unBindView,因爲我知道對象是弱語言,但是關於這種類型變量用法的規則是什麼?

謝謝你的答案!

+0

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html – iXcoder 2010-11-16 04:50:57

回答

1

因爲第二個對象unBindView從來沒有在代碼或IB分配,這似乎應該是零,但代碼仍然可以執行無零指針異常拋出....

在Objective- C,發送消息到nil只會導致沒有任何事情發生。這就是爲什麼你沒有得到例外。一方面它非常方便;另一方面,追蹤起來可能相當困難,並且在所有情況下都不是所期望的。

我的問題是,我上面的自由對象代碼是否正確並且是最好的方式?

我認爲沒關係。 = nil行不是必需的,因爲視圖控制器在被調用時已經被釋放,但我認爲它不會對你的應用代碼產生負面影響。

+0

感謝雖然我仍然奇怪的規則:) – iXcoder 2010-11-16 04:51:40