还有可能吗?我的意思是弱指针会自动为空。强指针只有在指向其他地方时才会释放。
我们还会有指向已释放对象的错误吗?
__unsafe_unretained 是由那些知道自己在做什么的人完成的。所以这并不是真正的错误。
还有可能吗?我的意思是弱指针会自动为空。强指针只有在指向其他地方时才会释放。
我们还会有指向已释放对象的错误吗?
__unsafe_unretained 是由那些知道自己在做什么的人完成的。所以这并不是真正的错误。
当心 __autoreleasing 与 @autoreleasepool。编译器不够聪明,无法在耗尽自动释放池时保留 __autoreleasing 变量的值。这包括带有 NSError** 参数的方法中的 @autoreleasepool。
当心 __block __autoreleasing 变量。这包括一个设置 NSError** 变量的块对象。一些基于块的 API 将块调用包装在自动释放池中,因此您最终会遇到与上述相同的缺陷。
请注意实际上是不安全未保留的 API。例如,AppKit 和 UIKit 中的许多委托指针都是不安全的未保留的,而不是零弱的。如果您不正确地安排您的对象图,那么当委托对象被解除分配并且工具包尝试使用它时,您将崩溃。
注意堆分配的 C 对象指针数组。可以正确执行此操作,但如果您不小心,则会出现泄漏或崩溃。
当心线程竞赛。如果你有一个多线程错误,那么所有的赌注都没有了。
__unsafe_unretained、CFTypeRefs、malloc()ed 内存