2010-03-29 22 views
0

以下代碼導致我出現一些問題。第三行會導致程序崩潰......在我第一次在程序中逐步完成但不知何故發生時,它不會發生。如果我評論第三行,程序運行順利。Objective-c字符串追加導致異常

NSString *myRequestString = @"text"; 
int i = 1; 
myRequestString = [myRequestString stringByAppendingString:[NSString stringWithFormat: @"t=%d", i]]; 

該代碼導致該異常:

*** -[CFString release]: message sent to deallocated instance 0xb4c43fe0

在一個側面說明,任何人都可以告訴我如何連接在Objective-C字符串像任何其他正常的語言......我可以」相信沒有連接操作符。

任何和所有的幫助,非常感謝。

+0

你知道,你可以使用'-stringByAppendingFormat:'。 – kennytm 2010-03-29 17:55:21

+0

感謝您的提示,切換它,但我仍然得到例外。 – 2010-03-29 18:05:43

+0

您確定該異常來自該行,還是在您的代碼中的其他位置?它表示在someString已被解除分配(參考計數爲0)之後,您(或某物)正在調用''someString release''。 此外,由於'stringByAppendingString'返回'NSString'的* new *實例,因此您正在泄漏'myRequestString'的原始實例。你可以用'myRequestString = [[myRequestString autorelease] stringByAppending ......]解決這個問題' – 2010-03-29 18:17:13

回答

-1

你需要一個NSMutableString做到這一點:

NSMutableString *myRequestString = [[NSMutableString alloc] initWithCapacity:20]; 
[myRequestString appendString:@"text"]; 
int i = 1; 
myRequestString = [myRequestString appendFormat: @"t=%d", i]; 

不要忘記:NSStringis immutable

+2

你是什麼意思「你需要NSMutableString來做到這一點」? NSString的工作方式很好 - 他不會做一個原地追加,但它會工作得很好。他只是沒有正確地管理他的記憶。如果你使用自動釋放的NSMutableString,它會以同樣的方式炸燬。 – Chuck 2010-03-29 18:14:41