0

我有以下方法:

(void)makeString:(NSString *)str1,... {

   va_list strings;

   NSString *innerText = [[NSString alloc] init];
   NSString *tmpStr = [[NSString alloc] init];

   if (str1) {

       va_start(strings, str1); 

       while (tmpStr = va_arg(strings, id)) { 
            innerText = [innerText stringByAppendingString:tmpStr];
       }

       label.text = [str1 stringByAppendingString:innerText];
   }

   [tmpStr release];

}

我最终会读到Objective C Memory Management,我相信我会在其中找到答案——可能与指针和复制有关——但是现在,如果我添加[innerText release],任何人都可以解释为什么;作为这个函数的最后一行,我在运行时得到一个 EXC_BAD_ACCESS 错误?

4

2 回答 2

1
于 2010-09-16T15:03:24.580 回答
-1

stringByAppendingString 返回一个自动释放的字符串,它将替换您的原始分配。所以不需要你的发布。但是您正在使用上面的两个分配泄漏内存。

您也应该使用 [NSString initWithCString:va_arg(strings, id)] 来分配 tmpStr。

于 2010-05-17T20:32:56.557 回答