выпуск контроллеров представления в примере кода Apple - PullRequest
2 голосов
/ 17 июня 2011

Здесь http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/TabBarControllers/TabBarControllers.html

в листинге 4.1

    - (void)applicationDidFinishLaunching:(UIApplication *)application {
       tabBarController = [[UITabBarController alloc] init];

       MyViewController* vc1 = [[MyViewController alloc] init];
       MyOtherViewController* vc2 = [[MyOtherViewController alloc] init];

       NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, nil];
       tabBarController.viewControllers = controllers;

       // Add the tab bar controller's current view as a subview of the window
       [window addSubview:tabBarController.view];
    }

Контроллеры вида выделены, но не освобождены. Разве не должно быть выпуска vc2 и vc2 после того, как они были добавлены в массив?

1 Ответ

2 голосов
/ 17 июня 2011

Если я что-то упустил, вы правы, что vc1 и vc2 должны быть выпущены. Опубликованный вами метод распределяет контроллеры представления, поэтому он должен либо сохранить их в переменных экземпляра, чтобы их можно было освободить позже, либо выпустить их и освободить их после добавления их в массив.

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

Хорошие глаза, хотя. Вы должны рассмотреть вопрос об ошибке в Apple по этому поводу.

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