Objective c 串分裂问题

Objective c 串分裂问题,objective-c,Objective C,我正在编写一个简单的程序,其中我拆分了一个字符串和一个用户全局,我使用以下代码来拆分字符串 NSString *GlobleStr;//globale variable //=============== NSString *xmlParsingResult=@"Apple,iphone"; NSArray *array = [xmlParsingResult componentsSeparatedByString:@","]; NSString *StrResult = [NSStr

我正在编写一个简单的程序,其中我拆分了一个字符串和一个用户全局,我使用以下代码来拆分字符串

NSString *GlobleStr;//globale variable

    //===============
NSString *xmlParsingResult=@"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:Apple value:iphone

但我的问题是,只要我调用另一个xib,我的全局变量就会为空或为零,应用程序就会崩溃(它抛出
错误,就像变量不是cfstring


有什么建议吗?

这是因为NSString的+stringwithFormat:方法返回一个自动释放的字符串。在局部变量中,这通常是为了防止内存泄漏(否则在处理完字符串后必须手动释放该字符串)。这里的问题是GlobleStr中的字符串在您分配它之后的某个时间被自动释放池释放,然后当您尝试在另一个地方访问它时,您会遇到崩溃

修复方法是:GlobleStr=[[NSString stringWithFormat:@“%@,[array objectAtIndex:1]]retain]

另一方面,您可以这样做:

GlobleStr=[[array objectAtIndex:1]retain]

我强烈建议您阅读有关Cocoa中内存管理的Apple文档:


最后,在没有看到您的代码的情况下,我无法确定,但我想知道为什么您要为GlobalStr使用全局变量。这是一个笼统的说法,当然也有例外,但在Cocoa中编程时,可能有更好的方法来构造代码。

您需要
保留您的全局代码,否则当自动释放池耗尽时,它将被释放:

GlobleStr = [[NSString stringWithFormat:@"%@", [array objectAtIndex:0]] retain];
记住在完成后释放它,特别是在给它赋值之前