Привет У меня есть очень простая проблема управления памятью с помощью моего UIViewController (или любого другого объекта, который я создаю); Проблема заключается в том, что в Инструменты График распределения объектов всегда растет, хотя я вызываю выпуск, а затем назначаю их nil.Управление памятью UIViewController
У меня есть 2 подкласса UIViewController, каждый из которых инициализируется с помощью NIB; добавить первый ViewController к главному окну, как [window addSubView:first.view];
Тогда в моем первом файл ViewController бобов У меня есть кнопка, которая загружает второй ViewController как:
-(IBAction)loadSecondView{
if(second!=nil){ //second is set as an iVar and @property (nonatomic, retain)ViewController2* second;
[second release];
second=nil;
}
second=[[ViewController2 alloc]initWithNibName:@"ViewController2" bundle:nil];
[self.view addSubView:second.view];
}
В моем (втором) ViewController2 у меня есть кнопка с метод действия
-(IBAction) removeSecond{
[self.view removeFromSuperView];
}
Пожалуйста, дайте мне знать, работает ли приведенная выше схема в управляемом режиме для памяти ...? В приборах Он не показывает выпуск любого распределения и сохраняет график состояния бара, который продолжает расти.
жаль, что это был просто вызов вызова .... я пропустил его набрал .... спасибо за совет ... исправьте меня, если я ошибаюсь, но то, что я понял из урской теории, заключается в том, что если я продолжу выделяя набор iVAr как свойство, он сам выпустит предыдущее распределение? – jAmi
Да, свойство всегда будет (афайк) выпустить его предыдущее значение при вызове сеттера. Когда вы определяете свойство как '(сохранение)', он освобождает старый объект и сохраняет новый объект. Остерегайтесь: при выполнении этого: 'self.someStringProperty = [[NSString alloc] init]', свойство сохранит новое значение, так что у вас будет счетчик из двух. 'self.someStringProperty = [[[[NSString alloc] init] autorelease]' предотвратит это. – Rengers
ok Я попробовал ваше предложение, но if (self.second! = Nil) {// Предотвращает создание нового контроллера, если он уже есть. self.second = [[[ViewController2 alloc] initWithNibName: @ "ViewController2" bundle: nil] autorelease]; } никогда не вызывается, поэтому я изменил условие if на if (self.second == nil) , который работает, но затем мой график в Object Allocations все еще растет. – jAmi