В моем приложении есть немного необычная ситуация, то есть
Я должен перезагружать некоторые сохраняемые свойства каждый раз, когда должно появиться представление,
код выглядит следующим образом:
// .h
@property (nonatomic, retain) NSArray *myData;
// .m
@synthesize myData;
- (void)viewWillAppear:(BOOL)animated {
... // get FetchRequest and so on
self.myData = [self.context executeFetchRequest:request error:&error]; // Line 1
[super viewWillAppear:animated];
}
- (void)viewDidUnload {
self.myData = nil;
[super viewDidUnload];
}
- (void)dealloc {
[myData release]; // Line 2
[super dealloc];
}
Есть несколько пунктов:
1-й.Как вы видите, свойство "myData" сохраняется, поэтому я думаю, что каждый раз, когда я устанавливаю для него какой-либо объект, он автоматически сохраняет этот объект?
2nd.Я должен перезагружать «myData» каждый раз, когда появится представление, как и код строки 1. выше.
3-ий.Поскольку это свойство сохранения, я должен сам его правильно освободить.
Теперь вопрос в том, правильно ли я управлял памятью без утечки myData, используя приведенные выше коды?
Если представление будет отображаться много раз, прежде чем оно будет освобождено (как, например, нажатие в дополнительном представлении в UINavigationController и его появление несколько раз),
, тогда myData сохранит некоторый объект более одного раза, но я освобождаюэто в dealloc для 1 раз в строке 2, так что это нормально?
Но если я добавлю этот метод в viewController, который, я думаю, более безопасен для предотвращения утечек памяти:
- (void)viewWillDisappear:(BOOL)animated {
self.myData = nil;
[myData release];
[super viewWillDisappear:animated];
}
- (void)dealloc {
// [myData release]; // don't release it here.
[super dealloc];
}
мое приложение зависнет после того, как один или два раза я нажму и выскользну из представления,
Так, какое из них действительно неправильное?
Большое спасибо!