最近在項(xiàng)目姑廉,看到有的代理用weak塑娇、assign、strong修飾形庭。
對(duì)于weak:?指明該對(duì)象并不負(fù)責(zé)保持delegate這個(gè)對(duì)象铅辞,delegate這個(gè)對(duì)象的銷毀由外部控制。
對(duì)于strong:該對(duì)象強(qiáng)引用delegate萨醒,外界不能銷毀delegate對(duì)象斟珊,會(huì)導(dǎo)致循環(huán)引用(Retain Cycles)
對(duì)于assing:也有weak的功效。但是網(wǎng)上有assign是指針賦值富纸,不對(duì)引用計(jì)數(shù)操作囤踩,使用之后如果沒有置為nil旨椒,可能就會(huì)產(chǎn)生野指針;而weak一旦不進(jìn)行使用后堵漱,永遠(yuǎn)不會(huì)使用了综慎,就不會(huì)產(chǎn)生野指針。
經(jīng)過一番研究怔锌,發(fā)現(xiàn)如果使用@property (nonatomic, assign, readwrite) id delegate;
會(huì)有crash寥粹,報(bào)錯(cuò)EXC_BAD_ACCESS
聲明一個(gè)delegate,那么即便delegate指向的對(duì)象銷毀了埃元,delegate中依然會(huì)保存之前對(duì)象的地址
即涝涤,delegate成為了一個(gè)野指針...
而使用weak,則不會(huì)有上述問題岛杀,當(dāng)delegate指向的對(duì)象銷毀后阔拳,delegate = nil,
所以答案就是类嗤,使用weak