2010-07-19 69 views
1

我有已申報財產和被分配在視圖初始化一個NSString做了如下負荷:實例變量超出作用域

NSString *textWithKey; 
@property(nonatomic,retain)NSString *textWithKey; 

中的.mi有

@synthesize textWithKey; 

和在viewDidLoad中我有

self.textWithKey=[[NSString alloc]init]; 
    [email protected]""; 

現在的地方在我的代碼我使用

self.textWithKey=[self.textWithKey stringByAppendingString:text1]; 

它工作正常直到另一個方法被稱爲返回不同的值。 從那裏再次調用這個perticularline,但調試器顯示textWithKey超出範圍。我沒有發佈textWihKey任何地方。

+0

首先''self.textWithKey = [[NSString alloc] init];'因爲下一行是完全不必要的......至於你的問題 - 你能發佈「另一種方法」代碼嗎?此外,如果您將遍歷所有使用'textWithKey'的地方併發布該行,這將有所幫助。 – 2010-07-19 12:24:23

回答

0

是的沒錯。你沒有釋放它。但你也沒有分配它。 ;-)起初你叫self.textWithKey = [[NSString alloc] init]。比你撥打self.textWithKey = @""。由於您使用屬性設置器,每次都會釋放舊的分配值。請嘗試以下操作:

self.textWithKey = [[NSString alloc] initWithString:@""]; 

因爲

self.textWithKey = @""; 

相同

self.textWithKey = [NSString stringWithString:@""]; 

有你不分配任何東西。 ;-)

+0

這不是事實。 '@「」'快捷鍵和'[NSString string ...]'版本都會返回已經分配的自動釋放對象。由於它們是自動發佈的,因此它們不需要明確的發佈。 – 2010-07-19 12:52:19

+0

確實如此。我試過你的代碼,它對我來說工作得很好。謝謝 – 2010-07-19 13:08:41

+0

是的,這是正確的丹雷。我說錯了。你需要分配內存。但是你不用手,你會得到一個自動釋放的字符串。你是對的。 – 2010-07-19 13:21:26

0

超出範圍的變量與發佈時不一樣。