2011-05-20 2 views
1

Надежда я не получаю упрекнул за это ...awakeFromNib и локальный переменный вопрос

Может кто-нибудь объяснить, как это проходит managedObjectContext к RootViewController?

Ниже шаблонный код автоматически генерируется для приложения основных данных IOS-:

- (void)awakeFromNib 
{ 
    RootViewController *rootViewController = (RootViewController *)  
    [self.navigationController topViewController]; 
    rootViewController.managedObjectContext = self.managedObjectContext; 
} 

В этом awakeFromNib, rootViewController является локальной переменной. Поэтому я думал, что это закончится, когда метод закончится. Я уверен, что это имеет какое-то отношение к тому, как наконечник подключен к IB, но я ищу лучшее объяснение. Если я прокомментирую этот код, приложение выйдет из строя, потому что оно не может найти объектную модель. Я знаю, что это работает, я просто хотел бы знать, почему и как это работает. Спасибо!

ответ

2

Переменная rootViewController является указателем на тип RootViewController и да, это локальная переменная. Но объект RootViewController, на который он указывает, не находится в локальной области. Как вы можете видеть, вы получаете указатель от navigationController, запрашивая его topViewController. Этот объект сохраняется объектом NavigationController, поэтому он все равно будет находиться даже после того, как указатель выходит за пределы области видимости. В любом случае это не Java или C# или C++. Объекты будут освобождены в Objective-C на основе подсчета ссылок.

Возможно, вы должны больше узнать об управлении памятью в Objective C, чтобы узнать больше об этом.

Смежные вопросы