assign:可以修饰所有的数据类型,作用是在set方法中是直接赋值的,没有内存管理代码,对OC对象的引用计数不会造成影响,如果指向的对象被释放,被修饰的指针不会清空,会变成野指针
retain:相比assign,retain只能修饰OC对象,并且自动增加了内存管理的代码,将指向对象的引用计数+1
strong:strong只能修饰OC对象,相当于retain的作用,会将指向对象的引用计数+1
weak:只能修饰OC对象,不会对被指向对象的引用计数造成影响,但是一旦被指向的对象被释放后,会自动清空,不会造成野指针,相对于assign,修饰范围变窄,但是安全