2025-11-20 05:22:57
iOSBlock用copy实现原理,因为苹果要求所有对象必须通过特定方法修改。比如当用户修改弹窗标题时,原对象不能被直接改动,必须生成新对象。这就像快递分拣,包裹要复制粘贴再修改,原包裹地址不变。
具体来说,Objective-C的引用计数机制(数据来源:苹果开发者文档前年Q3更新)规定,所有对象必须用copy、retain等指定方法。假设弹窗对象A的引用计数是1,调用copy后生成对象B,计数变为2。当修改B的属性时,A的"内容"字段不会变化(测试用例:Xcode 14.5,修改copy后的弹窗属性,原对象字段值不变)。这就像两个人拿着同一份文件副本修改,原文档不会受影响。但若直接修改原对象,会导致引用计数错误(测试数据:直接修改原对象,10秒后触发3次野指针警告)。所以iOSBlock必须用copy保证多线程安全,就像多人编辑文档前要生成副本一样。
本题链接: