Какой смысл, если я не установил свойство = nil в методе viewDidUnload? - PullRequest
1 голос
/ 05 октября 2011

Я определил свойство в моем viewcontroller следующим образом

@interface QuestionAnswerViewController : UIViewController 
{
    Question *question;
}

@property (nonatomic, retain) Question *question;

и я синтезировал это свойство в моем файле .m

@synthesize question;

Будут ли какие-либо проблемы, если я не установлю 'self.question = nil' в моем методе viewDidUnload?

- (void)viewDidUnload
{
    [super viewDidUnload];
    //Any issues if I don't set this?
    self.question = nil
}

Причина, по которой я спрашиваю это, заключается в том, что «свойство вопроса» фактически передается из другого контроллера представления. Я понял, что в случае нехватки памяти, представление моего контроллера представления будет автоматически выгружено, поэтому, если я установлю self.question = nil, я потеряю информацию на текущей странице (self.question становится nil). Просто хочу подтвердить последствия того, что не установите для синтезированного свойства значение nil и есть ли другие способы предотвратить это.

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Вы освобождаете только IBOutlets и те элементы, которые вы можете легко воссоздать в viewDidUnload.

Если представление выгружено, скажем, автоматически с помощью предупреждения памяти, любые подкомпоненты, которые не сохраняются, сохраняются.Уменьшенный не будет выгружен и будет отозвано меньше памяти, что может быть.В конечном итоге это может привести к прекращению работы вашего приложения из-за нехватки памяти.

В iOS IBOutlets сохраняются, поэтому установка их свойства на nil освобождает их.Поскольку представление, которое содержит их, выгружается, у этих подпредставлений нет причин жить, когда система перезагружает представление, подпредставления также будут перезагружены в это время.

1 голос
/ 05 октября 2011

Подразумевается, что те, кто сохранил subViews из mainView, поскольку они обычно имеют счет retain, равный 2 для тех, кто объявлен как retain, один, когда он был установлен впервые, и другой, когда он был добавлен как subView, когда superView выпущен, счет retain будет по-прежнему равен единице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...