__unsafe_unretained 和 __weak 都不会持有指针所指向的对象,但是在指向对象释放后,__unsafe_unretained 不会自动置空指针,会形成野指针,所以需要用户手动去置空,使用__weak 会自动置空指针。但是,如果访问__weak 修饰的属性时,runtime底层会调用objc_loadWeak() 和 objc_storeWeak来完成,这会带来很大的开销,所以避免使用__weak 属性。
__unsafe_unretained和__weak都不会持有指针所指向的对象。__unsafe_unretained在对象释放后不会自动置空指针,形成野指针;__weak会自动置空指针,但访问时runtime底层会调用objc_loadWeak()和objc_storeWeak,带来开销。
__unsafe_unretained 和 __weak 都不会持有指针所指向的对象,但是在指向对象释放后,__unsafe_unretained 不会自动置空指针,会形成野指针,所以需要用户手动去置空,使用__weak 会自动置空指针。但是,如果访问__weak 修饰的属性时,runtime底层会调用objc_loadWeak() 和 objc_storeWeak来完成,这会带来很大的开销,所以避免使用__weak 属性。
856
176

被折叠的 条评论
为什么被折叠?