File tree Expand file tree Collapse file tree 1 file changed +1
-1
lines changed Expand file tree Collapse file tree 1 file changed +1
-1
lines changed Original file line number Diff line number Diff line change 85
85
86
86
### 🐕 [ iOS26 Runtime Changes: Concurrent mutation of nonatomic properties] ( https://github.com/SwiftOldDriver/iOS-Weekly/issues/5148 )
87
87
88
- 对于 NSObject 的 property 是 nonatomic 的对象类型时,多线程的 set/get 会存在线程安全问题(非对象一样存在问题,只是不会崩溃),一个简单的修改方案是改为 atomic,注意这个只对一般对象有效。如果是 NSMutableDictionary 等容器对象,还需要考虑对其容器内内容的修改也要注意线程安全,一般得加锁解决;更极端需要多个属性同时保持同步则也得加锁。问题不仅在 property 中存在,全局变量也一样存在问题。具体可以参考我们推荐过的 [ 头条稳定性治理:ARC 环境中对 Objective-C 对象赋值的 Crash 隐患] ( https://mp.weixin.qq.com/s/chR42Vq4kACIEJBDYlbddg ) 。
88
+ [ @ ChengzhiHuang ] ( https://github.com/ChengzhiHuang ) : 对于 NSObject 的 property 是 nonatomic 的对象类型时,多线程的 set/get 会存在线程安全问题(非对象一样存在问题,只是不会崩溃),一个简单的修改方案是改为 atomic,注意这个只对一般对象有效。如果是 NSMutableDictionary 等容器对象,还需要考虑对其容器内内容的修改也要注意线程安全,一般得加锁解决;更极端需要多个属性同时保持同步则也得加锁。问题不仅在 property 中存在,全局变量也一样存在问题。具体可以参考我们推荐过的 [ 头条稳定性治理:ARC 环境中对 Objective-C 对象赋值的 Crash 隐患] ( https://mp.weixin.qq.com/s/chR42Vq4kACIEJBDYlbddg ) 。
89
89
90
90
在 iOS 26 以前,一般概率发生的崩溃崩溃的栈顶也在 objc_retain/objc_release 中;在 iOS 26 及之后,则如果发生这种线程安全问题,栈顶函数不变的情况下,会有明确的 EXC_BAD_ACCESS(KERN_INVALID_ADDRESS) 地址为 0x400000000000bad0 让这种情况更容易被辨识。
91
91
You can’t perform that action at this time.
0 commit comments