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方法,从而保证单例的线程安全。 ######[AI写代码神器 | 289点数解答 | 2023-11-08 00:30:18]
- 代码优化:提升“生命值监控模块”代码的健壮性与性能 (阿里通义 | 721点数解答 | 2024-10-19 15:16:56)296
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)24
- Java 创建 HTTP POST 请求实现文件上传:代码示例与注意要点 (字节豆包 | 300点数解答 | 2024-12-06 16:07:20)338
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)265
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)263
- 3ds Max弧形编辑器脚本详解:功能剖析、优化建议与关键逻辑注意点(DeepSeek | 656点数解答 | 2025-02-24 21:43:38)207
- 微型射击游戏代码:优化建议与关键逻辑注意点揭秘(字节豆包 | 173点数解答 | 2025-03-30 11:12:55)197
- Python 实现:统计玩具工厂红蓝色积木数量(字节豆包 | 169点数解答 | 2025-11-11 21:29:06)122
- Python 实现:统计红蓝色积木数量的详细攻略(字节豆包 | 299点数解答 | 2025-11-11 21:30:03)111
- Three.js 示例代码解析:优化场景渲染与注意要点(字节豆包 | 164点数解答 | 2025-02-27 23:30:20)262
- 深度剖析:iOS、Windows、安卓、Mac OS的差异大揭秘( | 166点数解答 | 2023-10-07 23:08:16)483
- iOS 10下集成Core Data的八大变化,开发必看!(阿里通义 | 345点数解答 | 2023-11-08 00:34:06)289