Я занимаюсь оптимизацией своего приложения и гарантирую правильность управления памятью. Когда я обнаружил, что didUnload/dealloc/willAppear не является надежным для реализации моей очистки памяти, я решил реализовать свой собственный метод, чтобы я мог полностью контролировать это управление памятью.Память не выпущена, хотя я ее явным образом ее освобождаю
Определение моих массивов в заголовочном файле
@property (retain) NSMutableArray *selectedCardIDs;
@property (retain) NSMutableArray *selectedRowArray;
@property (retain) NSMutableArray *cardArray;
@property (retain) NSMutableArray *cardIDArray;
Здесь метод выпуска:
- (void) willReleaseObjects {
[self.aCopyOfCardIDArray release];
[self.listOfItems release];
[self.aCopyListOfItems release];
[self.selectedCardIDs release];
[self.selectedRowArray release];
[self.cardArray release];
[self.cardIDArray release];
}
Массивы могут получить очень большой (> 1'000 запись каждого) , почему выпуск этих массивов необходим после того, как представление выгружено. Я явно вызывать эту функцию в методе IBAction, такие как:
- (IBAction) stopDictionary:(UIBarButtonItem *) sender {
[self closeDatabase];
[self willReleaseObjects];
[self dismissModalViewControllerAnimated:YES];
}
Я отлажена код и он фактически выполняет каждый релиз, однако, когда я диагностировать выделение памяти с помощью инструментов, кажется, освобождайте только частичную память, на самом деле почти ничего, потому что потребление памяти, конечно, увеличивается каждый раз, когда я загружаю это представление снова, что совсем не хорошо. Любая идея, почему моя память не выпущена здесь? Благодарю.
спасибо Клаус, я попробовал, тот же результат. Я добавил определение свойства в свой вопрос, и, как вы видите, я сохраняю все. И, насколько мне известно, все выделенные объекты должны быть выпущены с использованием release. По крайней мере, это то, что я до сих пор читал об управлении памятью. У меня как-то создается впечатление, что содержимое этого объекта viewController не уничтожается после того, как я вернусь к предыдущему виду. – renesteg
Вам может потребоваться проверить любые другие места, к которым вы обращаетесь к этим свойствам, и убедиться, что у вас нет дополнительного места. Также убедитесь, что не просачивайте его при создании свойств. Например. это вызовет утечку: self.property = [[AClass alloc] init]; Во всяком случае, описанный мной метод не вызовет утечек. –
Решено. Забыл авторекламу на alloc. Объекты теперь освобождаются, когда они должны. Но я понял другое странное поведение: когда я начинаю свой основной взгляд, я вижу около 400 объектов, как только отображается представление, счетчик распределения в Инструментах внезапно увеличивается до более чем 6000. Возможно, это будет нормально, поэтому не стоит снова начинать преследовать фантомы, если здесь нечего исправить. Мысли? И есть ли, возможно, тесты для таких вещей? Уолд весьма полезен, чтобы понять, что, поскольку само представление, конечно, также создаст сами объекты. Благодарю. – renesteg