最近在读一本书《高性能iOS应用开发》发现书中有些错误,也可能不是错误,只是过时罢了,以下勘误内容均已经实际运行了代码,却发现跟书中所述不符:
unsafe_unretained:
书中描述的 unsafe_unretained 所修饰的对象,在对象被释放之后,内存没有被分配,首次访问还可以正常访问,
image.png
image.png
实际验证是,一旦对象被销毁,再访问就会崩溃。不会等到第二次访问才会重新分配内存
2021-08-09 17:00:22.150888+0800 OCTest[4091:251794] enter -[ViewController createUnsafeUnretainedPhoto]
2021-08-09 17:00:22.151054+0800 OCTest[4091:251794] HPhoto dealloced
(lldb)
使用块时的变量捕获
image.png使用block的确有可能会造成循环引用,但书中举的例子并不能通过验证,经验证vc可以正常被释放。或许系统方法所提供的block对象已经做过了优化,并没有对捕获的self进行强引用,就比如动画类的block都可以正常使用self而没有循环引用的风险。
网友评论