UIViewController управление памятью - PullRequest
0 голосов
/ 13 мая 2010

Привет У меня есть очень простая проблема управления памятью с моим UIViewController (или любым другим объектом, который я создаю); Проблема в том, что в Инструментах мой график размещения Объектов всегда растет, хотя я вызываю команду release и затем присваиваю им nil.

У меня есть 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];
}

Пожалуйста, дайте мне знать, если вышеуказанная схема работает управляемым образом для памяти ...? В инструментах Он не отображает деблокирование какого-либо распределения и продолжает увеличивать график состояния бара.

1 Ответ

1 голос
/ 13 мая 2010

Прежде всего, зачем использовать эту схему, когда секунда является свойством:

if(second!=nil){
     [second release];
     second=nil;
 }
 second=[[ViewController2* second]initWithNibName:@"ViewController2" bundle:nil];

Собственность автоматически освобождает свое старое значение, когда используется установщик.Так что это можно переписать так:

if(self.second == nil) { //Prevents creating a new controller if there already is one.
     self.second = [[[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil] autorelease];
}

Кроме того, что случилось с [ViewController2* second]?Почему эта звездочка есть и что делает метод класса second?

...