2012-07-05 56 views
2

需要具有ARC知識的人來幫助我。將弱變量設置爲非@property變量

基本上,我已經宣佈了一些變量,例如在我的課

@interface Class{ 
    NSString* one; 
    NSString* two; 
} 

@property(nonatomic,weak) NSString* one; 

正如你所看到的,我可以在弱標識設置爲NSString* one。然而,我不需要一個獲取/設置/合成器NSString* two,因爲它只是一個常用變量。我如何設置一個weak標籤來解除分配內存?或者是自動設置?

回答

0

你可以這樣做,而不必擔心:

NSString* two = [[NSString alloc] init]; 

當你的類Class的實例是釋放某種原因,因爲是參照two唯一一個(理論上),它會被釋放。

0

我的建議(我認爲蘋果的,儘管我可能是錯的)將成爲總是使用屬性爲您的iVars的習慣,然後這個問題消失。

5

可以像這樣做:

__weak NSString *two; 

但你可能不希望做在這種情況下。

聲明一個實例變量__weak意味着對目標對象的引用(在你的情況下是一個字符串)只會在其他對象持有引用時才存在。當持有強引用的最後一個對象釋放字符串時,變量two將自動獲得nil。當對象持有對方的引用時(例如在父子層次結構中),這非常有用。由於您的NSString *two不可能持有對您的對象的引用,因此使用__weak引用是非常有問題的。

+0

+1我完全同意你的看法 – 2012-07-05 11:04:57