2010-09-20 79 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 - 特别是给予任何前其他价值。