Как решить проблему утечки памяти для строки, объявленной глобально в классе 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 решил бы это для вас.

Другие вопросы по тегам