Почему этот освобожденный контроллер представления не вызывает сбой при обмене сообщениями - PullRequest
0 голосов
/ 22 октября 2009
- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // Create the navigation and view controllers
    RootViewController *rootViewController = [[RootViewController alloc]
                                              initWithStyle:UITableViewStylePlain];
    UINavigationController *aNavigationController = [[UINavigationController alloc]
                                             initWithRootViewController:rootViewController];
    self.navigationController = aNavigationController;
    [aNavigationController release];
    [rootViewController release];

    [rootViewController setRegions:[Region knownRegions]];

    // Configure and display the window
    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];
}

Здесь в приведенном выше коде ссылка rootViewController используется для отправки сообщения setRegions: даже после того, как объект был освобожден в предыдущей строке.

если это не так, то как симулятор работает без сбоев? или же если это правильно, то опять как ?, я не вижу разницы между autorelease & release.

ИСТОЧНИК: - http://developer.apple.com/iphone/library/samplecode/TableViewSuite/listing12.html

СКАЧАТЬ: - developer.apple.com/iphone/library/samplecode/TableViewSuite/index.html

1 Ответ

5 голосов
/ 22 октября 2009

Объект, удерживаемый rootViewController, был сохранен aNavigationController, поэтому его счетчик сохранения равен 2, а aNavigationController был сохранен, когда ему присвоено self.navigationController, поэтому его счетчик хранения равен 2. Поэтому, когда вы отпускаете rootViewController и aNavigationController, их счетчики сохраняются до 1 каждый, поэтому они не собираются, поэтому вы можете получить к ним доступ через их ссылки.

Редактировать

Объекты собираются только после того, как число их сохранений достигнет 0, и любая ссылка на объекты будет действительна (даже если ссылка была освобождена) до этого времени. Разумеется, вы не хотите на это полагаться и должны сделать вызов до освобождения объекта, но в этом случае он работает.

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