在下面的函数中,如果删除tempString release语句,它可以正常运行,但始终存在运行时错误。它是一个简单的函数,它在NSTextField中显示_stackDisp1或_stackDisp2的数组,但是由于某种原因释放字符串会导致运行时错误。

- (void) displayArr:(NSMutableArray*)stack{
  NSTextField *myObj;
  if([stack count] <= 10) myObj = _stackDisp1;
  else myObj = _stackDisp2;
  NSString *tempString = [[NSString alloc]initWithString:@""];
  for(NSString *i in stack){
    tempString = [NSString stringWithFormat:@"%@\n%@",tempString,i];
  }
  [myObj setStringValue:tempString];
  [tempString release];
}

最佳答案

那是因为

tempString = [NSString stringWithFormat:@"%@\n%@",tempString,i];


创建一个新的自动释放对象,将其分配给变量tempString。指向第一个对象的指针丢失了,您最终过度释放了一个自动释放的对象。只需将初始分配更改为

  NSString *tempString = @"";


并删除[tempString release]行。

关于cocoa - 释放NSString对象时出现运行时错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9122083/

10-09 16:32