2011-06-14 78 views
3

我該如何dealloc一個布爾值?布爾值的Objective-c dealloc

下面這樣Deallocing它給了我一個警告:不兼容的指針從「無效*」

- (void)dealloc { 
    self.booleanVar = nil; 
    [super dealloc]; 
} 

也許我要澄清,這是整數轉換分配給「BOOL」(又名「符號字符」)來自一個從NSObject繼承的簡單類。

我使用的是你在Cocoa Touch類中看到的self.var = nil模式。比方說,如果是NSString *,我應該在dealloc方法中使用self.var = nil或[var release]?我在這裏有點困惑。

回答

10

你不需要這樣做。它是而不是的一個對象。這也解釋了警告,因爲你試圖將一個零指針(基本上是NULL)指向一個非對象。


關於你的第二個問題,是的。你可以把原始變量看作是對象的一部分,所以當它被釋放時,變量就不會再存在了。

但是,當你在對象中有一個NSString *時,它只是一個指向另一個對象的指針。如果你釋放前者,指針將被刪除,而不是NSString。沒有人會指出它,它在空中迷失,佔據着記憶。因此,在刪除指針之前,如果您不再需要該對象,則會向其發送一條釋放消息。這是在dealloc方法中完成的,因爲它被稱爲「刪除」和對象,因此是一個很好的地方,可以刪除任何不再使用的其他對象。

2

您不需要釋放BOOL,因爲BOOL實際上只是一個字節,它是一種原始數據類型。您只需要分配已分配給內存的對象。

0

首先,如果booleanVar只是一個簡單的BOOL值,因爲在其聲明如下所示:

BOOL booleanVar; 

那麼你並不需要釋放任何與之相關的記憶,因爲內存是分配和釋放時,持有它的類被分配和釋放。所以在dealloc中沒有booleanVar代碼就沒問題了。

但是,如果你是在談論一個BOOL指針,像這樣定義的:

BOOL *booleanVar; 

,你想要的是把這個變量設爲非值,則應該將其設置爲NULL而不是nil,因爲NULL用於值指針,nil用於對象指針(請參閱:NULL vs nil in Objective-C)。

但是,如果你想要的是釋放內存的BOOL指針指向,與mallocrealloc等分配,然後再嘗試free() C函數(見:http://www.cplusplus.com/reference/clibrary/cstdlib/free/)。

如果您在類接口中向我們顯示了booleanVar的屬性聲明,它會告訴我們您想要做什麼,您將得到一個完整的確認答案。