酷代码 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点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]