IOS - AppDelegate как переменная экземпляра?
Можно ли использовать AppDelegate как переменную экземпляра в UIViewController
? Как @property (nonatomic, weak) AppDelegate *appDelegate;
Почему я спрашиваю, потому что мне нужно получить к нему доступ довольно часто, а не делать:
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[appDelegate doSomething];
Я мог бы сделать:
[appDelegate doSomething]
Ответы
Ответ 1
Или вы могли бы сделать
-(YourAppDelegate*) app
{
return (YourAppDelegate*) [[UIApplication sharedApplication] delegate];
}
В подклассе UIViewController - сделайте это базовым классом всех ваших контроллеров представлений.
Затем [self app]
работает, и вам не нужно сохранять ссылку.
Я делаю это, чтобы сохранить некоторые простые простые утилиты там - вы также можете сделать это с категорией.
Ответ 2
Может быть, все в порядке.
Но мое любимое решение следующее.
В AppDelegate.h
+ (AppDelegate *)appDelegate;
В AppDelegate.m
+ (AppDelegate *)appDelegate
{
return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}
Затем используйте везде, где хотите:
AppDelegate* sharedDelegate = [AppDelegate appDelegate];
Некоторые примечания:
если вы используете AppDelegate
для общих данных, вы можете читать singletons-appdelegates-and-top-level.html.
если вы используете AppDelegate
для своего рабочего процесса логических приложений, вы можете читать handling-your-initial-view-controllers-for-iphone/
Надеюсь, что это поможет.
Ответ 3
Различие между доступом к делегату посредством полного выражения в сравнении с (неатомным, слабым) свойством произвольно. Конечно, сохраните себе строки кода, указав свойство, если вы собираетесь его часто называть.
Однако возникает вопрос о большей проблеме возможной проблемы инкапсуляции. Лучшая практика предполагает, что призывы идут вниз по иерархии против вверх. Конечно, делегат приложения - это особый случай, но все же мой совет должен был рассмотреть возможные способы выделения любого ресурса, который вам нужен из делегата приложения, и передать эти ссылки вниз по иерархии диспетчера представлений, поскольку эта иерархия создан.