只有强引用才能造成循环引用。
对于实例变量可以在它前面加上__weak表示弱引用。
strong是默认的,所以不用特意写。
局部对象和实例变量在默认情况下都保持对对象的强引用。
弱引用是需要被缓存的。
对象是可以有weak属性的,如果该对象的weak属性被使用了,那么该对象的weak属性就不需要被缓存,不然的话就会被立即释放。
因为weak引用具有,只有在有strong引用存在的情况下才有意义的特性。所以在不经意间被weak引用的对象就可能被释放,所以在使用weak引用之前一定要确保它所指向的对象没有被释放,也就是要判空。
某些情况下你是无法使用weak的,但是你有需要weak的功能,这个时候可以使用unsafe_unretained关键字来代替weak。这两者唯一不同的时候unsafe_unretained在没有强引用存在的情况下并不会把对象置为nil,这就容易引起崩溃。
被weak引用引用的对象被销毁的时候应该通知通过该weak引用引用它的那个对象。
最常见的是当一个delegate对象不再被使用的时候,你需要发送nil给它。