從兩個方面來說區(qū)別:1,使用范圍 2蹋肮,指針引用
copy主要用于字符串和block,weak assign strong都可以用于OC對象馁龟,但assign還可以用于修飾基本數(shù)據(jù)類型
從指針引用來看漆魔,strong是強(qiáng)指針,強(qiáng)引用 如果對象被持有了無法自動釋放 ?weak assign是弱指針 弱引用改抡; weak修飾成員變量是以_ _weak弱指針來修飾,比如 dog * _ _weak _dog1; 而assign是dog *_ _unsafe_unretained_dog1; _ _weak 弱指針指向的對象銷毀時雀摘,指針會自動設(shè)置為nil 不再指向這個對象 ; _ _unsafe_unretained修飾的還會指向這個對象 而指針指向一個被銷毀不存在的對象就會成為俗稱的野指針涯塔,程序走到此處 crash清蚀。當(dāng)assign修飾對象計(jì)數(shù)為0時 手動置為nil可較好預(yù)防崩潰。
delegate用 strong weak assign的區(qū)別
用weak 而不用 assing的原因 是因?yàn)?當(dāng)weak修飾屬性置為0被釋放之后會自動置為nil 而 assing不會 結(jié)果就是 weak修飾的對象在指向該對象是至少會得到一個nil的返回 assing修飾的下去找不到就成了野指針 程序就崩了枷邪。而strong修飾的delegate 因?yàn)楸粡?qiáng)引用之后計(jì)數(shù)不會自動置為0 容易無法釋放造成循環(huán)引用。