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];
记住在完成后释放它,特别是在给它赋值之前