Правильный шаблон управления памятью для выделения / инициации представления, добавления в подпредставление и возврата - PullRequest
0 голосов
/ 12 мая 2011

Я уверен, что такого рода вопрос был задан до смерти, и я понимаю, что я должен делать, но это не работает.Мое приложение падает:

Вот код:

    PDFViewController *cv = [[PDFViewController alloc] initWithNibName:@"PDFViewController" bundle:[NSBundle mainBundle]];
cv.view.frame = CGRectMake(0, 0, 1024, 748);

    [self.view addSubview:cv.view];

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

      [cv release];

Мой сбой приложения.То же самое, если я добавлю его в пул авто-релиза (на alloc / init).Теперь мое беспокойство заключается в следующем:

0) Я размещаю / инициализирую, поэтому я обязан освободить (или добавить в пул автоматического выпуска).

1) Вызов addSubview:cv.view увеличивает счет сохранения cv.

2) Я должен иметь возможность отправить ему сообщение о выпуске, поскольку оно сохраняется в self.view.

3) Что не так?

TIA.

РЕДАКТИРОВАТЬ Решение

PDFViewController *cv = [[PDFViewController alloc] initWithNibName:@"PDFViewController" bundle:[NSBundle mainBundle]];
[self presentModalViewController:cv animated:YES];

Ответы [ 2 ]

4 голосов
/ 12 мая 2011

Вызов addSubview: cv.view не увеличивает счетчик сохранения объекта cv. Это увеличивает оставшийся счетчик для «cv.view», поэтому «self.view» сохраняет только «cv.view».

1 голос
/ 12 мая 2011

cv.view - это метод получения, который автоматически отображает вызов ivar autorelease. Лучше всего, вероятно, создать ivar _cv и использовать его вместо локальной переменной. Тогда смело выпускайте ивара в свой диллок: [_cv release]; _cv = nil;

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