, если я запускаю этот код:
NSString *xml = [[NSString alloc] init];
xml=[NSString stringWithFormat:@"<%@>", @"msg"];
NSLog(@"%@\n",xml);
[xml release];
Я получил:
2010-09-07 11:45:15.523 test[1312:207] <msg>
2010-09-07 11:45:15.527 test[1312:207] *** -[CFString release]: message sent to deallocated instance 0x3d52ba0
У меня есть красный проводник памяти, и я думаю, что:если я создаю объект, используя методы alloc
& init
, я должен освободить этот объект, но здесь правило не очень хорошо работает, почему?
ОБНОВЛЕНО
кажется, что эта строка xml=[NSString stringWithFormat:@"<%@>", @"msg"];
является проблемой.Я заменил его на xml=@"something";
, и это сработало.
Есть идеи, почему я не могу использовать здесь метод stringWithFormat
?
ОБНОВЛЕНО
Спасибо заответы @ (Douwe Maan, BoltClock, Rod)
Я обновил код, просто тестирую другой способ:
NSString *xml = [[NSString alloc] initWithFormat,@"<%@>", @"msg"];
NSLog(@"%@\n",xml);
[xml release];
интересно: если я запускаю этот код с включенной опцией отладки, я получаюсообщение: *** -[CFString _cfTypeID]: message sent to deallocated instance 0x3954ab0
, но если я запускаю его без инструмента отладки, оно никогда не отправляет сообщение о том, что.
questions:
1. это нормально, что ошибкасообщение не появится, если я не запускаю проект с помощью инструмента отладки?
2. Итак, в чем проблема с initWithFormat
?, это то же самое, что stringWithFormat
?(я думаю, что он не создает автоматически выпущенный экземпляр)
3. Как я могу знать, что какой-то метод возвращает автоматически выпущенный экземпляр ?, есть ли какое-либо соглашение об именовании где-нибудь?