2010-09-20 81 views
1

我在一個簡單的程序中工作,在該程序中我拆分了一個字符串和一個全局用戶,我使用下面的代碼拆分字符串。字符串拆分問題

NSString *GlobleStr;//globale variable 

    //=============== 
NSString *[email protected]"Apple,iphone"; 
NSArray *array = [xmlParsingResult componentsSeparatedByString:@","]; 
NSString *StrResult = [NSString stringWithFormat:@"%@", [array objectAtIndex:0]]; 
GlobleStr =[NSString stringWithFormat:@"%@",[array objectAtIndex:1]]; 
NSLog(@"cmd %@",StrResult); 
NSLog(@"value%@",GlobleStr); 

我的代碼可以分割字符串和O/P是cmd:蘋果值:iphone

但我的問題是,只要我調用另一個廈門國際銀行,然後我的全局變量將是空的或零和該應用程序將崩潰(它會拋出error like Variable is not cfstring)。

有什麼建議嗎?

+0

編輯you code formate – 2010-09-20 13:13:05

回答

2

這是因爲NSString的+ stringwithFormat:方法返回一個自動釋放字符串。在一個局部變量中,這通常是你想要防止內存泄漏的地方(否則當你完成它時你必須手動釋放這個字符串)。這裏的問題是GlobleStr中的字符串在你分配它後有時會被autorelease池釋放,然後當你嘗試在另一個地方訪問它時你會崩潰。修復是這樣的:GlobleStr = [[NSString stringWithFormat:@「%@」,[array objectAtIndex:1]] retain];

順便說一句,你可以做這個代替:

GlobleStr = [[陣列objectAtIndex:1]保留];

我強烈建議您閱讀Apple有關可可內存管理的文檔:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

最後,沒有看到您的代碼,我不能肯定地說,但我很想知道爲什麼您要爲GlobleStr使用全局變量。這是一個全面的陳述,當然也有例外,但是在Cocoa編程時,可能有更好的方法來構建代碼。

1

您需要retain全局,否則將被釋放時自動釋放池水渠:它後,當你做了

GlobleStr = [[NSString stringWithFormat:@"%@", [array objectAtIndex:0]] retain]; 

記住release - 特別是給予任何前其他價值。