Управление памятью в Obj-C: почему это не работает? - PullRequest
0 голосов
/ 10 апреля 2010

Почему не работает следующий код?

MyViewController *viewController = [[MyViewController alloc] init];
[myWindow addSubview:viewController.view];
[viewController release];

Как я понимаю, myWindow должен сохранять viewController.view столько, сколько нужно окну. Так почему же это приводит к сбою моего приложения при запуске? (комментирование последней строки исправляет проблему, как и ожидалось)

1 Ответ

9 голосов
/ 10 апреля 2010
[viewController release];

Вы выпускаете viewController, а не представление. myWindow сохранит представление, которое вы передаете, но не сам контроллер представления, что вызывает его освобождение.

Поскольку view сохраняется контроллером представления при его инициализации, а затем сохраняется myWindow при его добавлении, я полагаю, что причиной сбоя являются последующие вызовы viewController (которые теперь будут освобождены).

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