Как решить проблему утечки памяти для строки, объявленной глобально в классе NSObject и используемой где-то еще
В моем приложении для iPhone у меня есть NSObject
класс "Контакт" в том, что у меня есть такая строка
@interface Contact : NSObject
@property (nonatomic, retain) NSString *name;
@implementation Contact
@synthesize name;
и я использовал эту строку имени в каком-то другом классе (в методах Sqlite) следующим образом
Contact *contact = [[[Contact alloc] init] autorelease];
contact.name = [NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 1)];
когда я бегу, используя инструменты, у меня есть некоторые предупреждения памяти
contact.name = [NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 1)];
У меня так много утечек, как это.. как решить эту проблему..
1 ответ
Я не вижу ничего плохого в коде, который вы показали, если вы не реализовали должным образом dealloc
метод в вашем Contact
учебный класс.
Это должно быть что-то вроде этого (Contact.m):
-(void) dealloc {
[name release];
[super dealloc];
}
Я не могу сказать, что вы подразумеваете под своим комментарием
да, я использовал это отпустить их в разгрузке
Если все, что вы делаете, это освобождение Contact
объект в представлении контроллера viewDidUnload
метод, этого недостаточно.
Однако я воспользуюсь возможностью, чтобы сказать, что ARC уже некоторое время доступен, и почти все, кто не является экспертом (и большинство экспертов тоже), должны использовать ARC вместо ручного управления памятью, как это.
Это действительно экономит много трудоемких отладочных упражнений, и если ваша проблема была в этом dealloc
вопрос, то ARC решил бы это для вас.