最近面試有人問一個(gè)問題,KVO,通知,NSTimer 哪個(gè)會(huì)造成強(qiáng)引用?
當(dāng)時(shí)還問蒙了,不知道具體怎么回答,NSTimer 肯定會(huì)強(qiáng)引用忽冻,
但是KVO還有通知呢?想想它的用法此疹,在銷毀時(shí)必須移除僧诚,是否也是強(qiáng)引用呢?
研究了一下用法?KVO是 isa swizzling蝗碎,是混合的
自動(dòng)鍵-值觀察是由叫isa-swizzling的技術(shù)實(shí)現(xiàn)的湖笨。
isa指針,如其名稱所指衍菱,指向維護(hù)分發(fā)表的對(duì)象的類。該分發(fā)表實(shí)際上包含了指向?qū)崿F(xiàn)類中的方法的指針肩豁,和其它數(shù)據(jù)脊串。
當(dāng)某個(gè)對(duì)象的屬性注冊(cè)了中觀察者時(shí)辫呻,當(dāng)該被觀察對(duì)象的isa指針被修改為指向一個(gè)中間類,而不是真實(shí)的類琼锋。因此isa指針的值并不一定反映實(shí)例的實(shí)際類放闺。
你的程序應(yīng)當(dāng)使用class方法來確定實(shí)例對(duì)象的類,而不是依賴于isa指針缕坎。
所以KVO怖侦,通知并不會(huì)造成強(qiáng)引用。