gpt4 book ai didi

iOS AppDelegate 作为单例无法返回相同的实例

转载 作者:行者123 更新时间:2023-11-29 01:51:49 24 4
gpt4 key购买 nike

我尝试将我的 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 类的新实例。相反,您想要的是在应用程序启动时捕获 UIApplication 为您创建的实例。最简单的方法是使用 sharedApplication 单例,它已经存储了委托(delegate)实例:

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

关于iOS AppDelegate 作为单例无法返回相同的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31310486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com