iOS - AppDelegate作为实例变量?

Pet*_*rbo 10 objective-c uiapplicationdelegate ios

可以将AppDelegate作为实例变量UIViewController吗?喜欢@property (nonatomic, weak) AppDelegate *appDelegate;

为什么我问的是因为我需要经常访问它而不是这样做:

AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 

[appDelegate doSomething]; 
Run Code Online (Sandbox Code Playgroud)

我可以:

[appDelegate doSomething]

Lor*_*o B 18

也许它可以.

但我最喜欢的解决方案如下.

在你的 AppDelegate.h

+ (AppDelegate *)appDelegate;
Run Code Online (Sandbox Code Playgroud)

在你的 AppDelegate.m

+ (AppDelegate *)appDelegate
{
    return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}
Run Code Online (Sandbox Code Playgroud)

然后在任何地方使用:

AppDelegate* sharedDelegate = [AppDelegate appDelegate];
Run Code Online (Sandbox Code Playgroud)

一些说明:

如果您使用AppDelegate共享数据,您可以阅读singletons-appdelegates-and-top-level.html.

如果你AppDelegate用于你的逻辑应用程序工作流程,你可以阅读处理你的初始视图控制器为iPhone /

希望能帮助到你.


Lou*_*nco 14

或者你可以做到

-(YourAppDelegate*) app
{
   return (YourAppDelegate*) [[UIApplication sharedApplication] delegate];
}
Run Code Online (Sandbox Code Playgroud)

在UIViewController的子类中 - 然后将其作为所有视图控制器的基类.

然后,[self app]工作,你不必保持参考.

我这样做是为了保留一些常见的简单实用程序 - 您也可以使用类别来执行此操作.