从两个方面来说区别:1,使用范围 2,指针引用
copy主要用于字符串和block,weak assign strong都可以用于OC对象,但assign还可以用于修饰基本数据类型
从指针引用来看,strong是强指针,强引用 如果对象被持有了无法自动释放 weak assign是弱指针 弱引用; weak修饰成员变量是以_ _weak弱指针来修饰,比如 dog * _ _weak _dog1; 而assign是dog *_ _unsafe_unretained_dog1; _ _weak 弱指针指向的对象销毁时,指针会自动设置为nil 不再指向这个对象 ; _ _unsafe_unretained修饰的还会指向这个对象 而指针指向一个被销毁不存在的对象就会成为俗称的野指针,程序走到此处 crash。当assign修饰对象计数为0时 手动置为nil可较好预防崩溃。
delegate用 strong weak assign的区别
用weak 而不用 assing的原因 是因为 当weak修饰属性置为0被释放之后会自动置为nil 而 assing不会 结果就是 weak修饰的对象在指向该对象是至少会得到一个nil的返回 assing修饰的下去找不到就成了野指针 程序就崩了。而strong修饰的delegate 因为被强引用之后计数不会自动置为0 容易无法释放造成循环引用。
网友评论