В моей функции ниже, если я удаляю оператор выпуска tempString, он работает просто отлично, но вместе с ним ВСЕГДА возникает ошибка времени выполнения. Это простая функция, которая отображает массив в NSTextField либо _stackDisp1 или _stackDisp2, но по какой-то причине освобождение строки создает ошибку времени выполнения. Любая помощь?Ошибка выполнения при выпуске объекта NSString
- (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];
}
Я думал, что если объект был создан с использованием alloc, программист отвечал за его освобождение. Почему это авто-релиз? –
Тогда начальная 'tempString' была действительно создана с использованием' alloc' и должна была быть выпущена. Но так как вы никогда не трогаете его, заменив его экземплярами autoreleased ('stringWithFormat:') в вашем цикле for, это не обязательно в первую очередь. Замените строку 'initWithString:' на 'NSString * tempString = @" ";' и удалите '[tempString release];' или (и это то, что вы должны сделать, а не изобретать колесо) используйте код, который я опубликовано в моем ответе. Существует уже метод для того, что вы пытаетесь сделать, поэтому используйте его. – Regexident