iOS 作为单例的 AppDelegate 无法 return 同一个实例

iOS AppDelegate as singleton failed to return same instance

我尝试将我的 AppDelegate 设为单例并通过我的应用程序访问它:

AppDelegate.h

/.../
@interface AppDelegate : UIResponder <UIApplicationDelegate>

+(AppDelegate*)sharedAppDelegate;

@end

AppDelegate.m

#import AppDelegate.h
/.../
@implementation AppDelegate

AppDelegate *sharedAppDelegate;

+ (AppDelegate *)sharedAppDelegate{

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedAppDelegate = [[self alloc] init];
    });
      NSLog(@"shared app: %@",sharedAppDelegate)
      return sharedAppDelegate;

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"launched app: %@",self);
}

MyClass.m

#import AppDelegate.h
/.../
- (void)viewDidLoad{
    [super viewDidLoad];
    NSLog(@"app in myClass: %@",[AppDelegate sharedAppDelegate]);
}

控制台中的日志:

[***]launched app:   <AppDelegate: 0x78757810>
[***]shared app:     <AppDelegate: 0x78f39760>
[***]app in myClass: <AppDelegate: 0x78f39760>

为什么发布的和分享的不一样?

我不是真的把AppDelegate做成了单例吗?

+sharedAppDelegate 中,您正在分配 AppDelegate class 的新实例。相反,您想要的是在应用程序启动时捕获 UIApplication 为您创建的实例。最简单的方法是使用 sharedApplication 单例,它已经存储了委托实例:

+ (AppDelegate *)sharedAppDelegate {
    return [[UIApplication shareApplication] delegate];
}