问个问题,weak修饰的对象在被释放时候,指针会置为nil,strong修饰的对象什么时候指针置为nil的?

在MRC环境时候,我记得有时候dealloc里要把self对象置为nil,但是ARC里没这个操作了,那是什么时候把指针置为nil的?

autoreleasepool释放的时候

1 个赞

__weak修饰的对象在被释放时,指针会自动置为nil。而__strong修饰的对象,指针不会自动置为nil。只有当你显式地将指针置为nil或者该对象超出其作用域时,才会释放该对象。

如果__strong修饰的对象被释放后,指针没有被显式地置为nil,那么这个指针就会变成一个野指针。野指针指向的内存地址是不确定的,如果你试图访问这个野指针,可能会导致程序崩溃或者其他未定义的行为。
因此,在使用__strong修饰的对象时,应当注意在对象被释放后将指针置为nil,以避免出现野指针的问题。

那为什么还要设计出 strong 关键字呢?

__strong是Objective-C中默认的对象修饰符。它表示该指针拥有对所指向对象的强引用,即只要该指针存在,所指向的对象就不会被释放。
__strong修饰符在内存管理中非常重要,它可以确保对象在其生命周期内不会被意外释放。例如,当你创建一个对象并将其赋值给一个__strong修饰的指针时,只要该指针存在,该对象就不会被释放。
当然,使用__strong修饰符也需要注意避免循环引用的问题。如果两个对象互相持有对方的强引用,那么这两个对象都不会被释放,从而导致内存泄漏。为了避免这种情况,可以使用__weak修饰符来创建弱引用。
总之,__strong修饰符在内存管理中非常重要,它可以确保对象在其生命周期内不会被意外释放。但是,在使用它时也需要注意避免循环引用的问题。

了解了,感谢~