unsafe_unretained和weak都可以作为属性特质避免循环引用,他们的区别是:unsafe_unretained所修饰属性是不安全的,而且不归此事例拥有,如果系统已经把属性所指的那个对象回收,那么在回收的对象上调用方法会导致程序崩溃,而weak所修饰属性则会指向nil,这样就不会导致程序崩溃。所以委托对象属性使用weak修饰有两个作用,一个是避免循环引用,一个是委托对象回收时,继续使用弱引用避免程序崩溃。