字符串拆分问题

时间:2010-09-20 13:10:15

标签: objective-c

我正在开发一个简单的程序,我在其中分割字符串和用户全局,我使用以下代码来分割字符串。

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值:iphone

但我的问题是,只要我调用另一个xib,那么我的全局变量将为空或nil,应用程序将崩溃(它会抛出error like Variable is not cfstring)。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

这是因为NSString的+ stringwithFormat:方法返回一个自动释放的字符串。在本地变量中,这通常是您希望防止内存泄漏的原因(否则您必须在完成后手动释放该字符串)。这里的问题是GlobleStr中的字符串在分配后会被自动释放池释放,然后当您尝试在另一个地方访问它时会发生崩溃。

修复是这样的:GlobleStr = [[NSString stringWithFormat:@“%@”,[array objectAtIndex:1]] retain];

顺便说一句,你可以这样做:

GlobleStr = [[array objectAtIndex:1] retain];

我强烈建议您阅读Apple有关Cocoa内存管理的文档:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

最后,在没有看到你的代码的情况下我无法肯定地说,但我很想知道你为什么要为GlobleStr使用全局变量。这是一个全面的陈述,当然也有例外,但是在使用Cocoa进行编程时,可能有更好的方法来构建代码。

答案 1 :(得分:1)

你需要retain你的全局,否则当自动释放池耗尽时它将被解除分配:

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

请记得稍后完成时release - 特别是之前为其分配任何其他值。