использование пользовательского метода инициализации в iphone — выявление утечки

#iphone #memory-leaks #init

#iPhone #утечки памяти #инициализация

Вопрос:

Для одного из моих пользовательских классов я определил метод с именем initialize для установки некоторых переменных экземпляра одновременно с инициализацией. Код приведен ниже. Инструмент анализатора сообщает об утечке в viewDidLoad в строке с [[employee alloc].. Поскольку я освобождаю переменную в dealloc, я подумал, что это должно быть нормально..в чем может быть проблема? заранее спасибо.

 @interface testViewController : UIViewController <UITextFieldDelegate>{
    Employee *employee;
}
- (void)viewDidLoad {  
if(employee ==nil) 
   employee = [[Employee alloc] initialize:@"John"];    

if (![employee.entityName isEqualToString:@"Test"]) { //The leak is reported here for object allocated above
    ///...
}

}

- (void)viewDidUnload {
    [super viewDidUnload];
    employee = nil;
}

- (void)dealloc {
    [super dealloc];
  [employee release];

}

//In the Employee class
-(id) initialize:(NSString*) name{
    self = [super init];

    self.entityName = name;


    return self;
}
  

Ответ №1:

В вашем, viewDidUnLoad вам нужно release employee, прежде чем для него будет установлено значение nil . В противном случае в вашем dealloc вы просто выпускаете nil .

ie

 - (void)viewDidUnload {
    [super viewDidUnload];
    [employee release];
    employee = nil;
}
  

Комментарии:

1. Привет, спасибо, но я все еще не могу устранить обнаруженную утечку. интересно, почему: (