酷代码 AI
菜单
全部AI  /  热门  /  AI问答
服务商

在ios开发中,arc环境下创建单例有哪两种方式,请举例说明?

在iOS开发中,ARC环境下创建单例有两种方式:懒加载方式和关联对象方式。 1. 懒加载方式: ```objective-c #import "Singleton.h" @implementation Singleton + (Singleton *)sharedInstance { static Singleton *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; } @end ``` 2. 关联对象方式: ```objective-c #import "Singleton.h" @implementation Singleton + (Singleton *)sharedInstance { static Singleton *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; // 使用关联对象的方式,将sharedInstance与self强关联 [self willChangeValueForKey:@"sharedInstance"]; objc_setAssociatedObject(self, @"sharedInstance", sharedInstance, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self didChangeValueForKey:@"sharedInstance"]; }); return sharedInstance; } @end ``` 注意:关联对象方式需要在+load方法中,使用+willChangeValueForKey和+didChangeValueForKey方法进行一次KVO操作,这样才能确保所有类的+load方法都执行完毕后,才会调用单例的+sharedInstance方法,从而保证单例的线程安全。 [2023-11-08 00:30:18 | AI问答 | 289点数解答]

相关提问