ARC之后,你还能以什么方式错误地引用解除分配的对象?

Sep*_*gus 4 objective-c automatic-ref-counting

还有可能吗?我的意思是弱指针会自动为空.强指针只有在指向其他地方时才会解除分配.

我们仍然可以指向解除分配的对象吗?

__unsafe_unretained由知道他们正在做什么的人完成.所以这不是真的错误.

Gre*_*ker 13

小心__autoreleasing vs @autoreleasepool.当编译器耗尽自动释放池时,编译器不够智能以保留__autoreleasing变量的值.这包括带有NSError**参数的方法中的@autoreleasepool.

小心__block __autoreleasing变量.这包括一个设置NSError**变量的块对象.一些基于块的API将块调用包装在自动释放池中,因此您最终会遇到与上面相同的缺陷.

谨防那些实际上不安全的API.例如,AppKit和UIKit中的许多委托指针都是不安全的,而不是非零弱的.如果您错误地排列了对象图,那么当代理对象被释放并且工具包尝试使用它时,您将崩溃.

注意堆分配的对象指针C数组.可以正确地做到这一点,但是如果你不小心那么你会发生泄漏或崩溃.

小心线程竞赛.如果您有多线程错误,则所有投注均已关闭.