3 回答

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
delegate運(yùn)行成本低。block成本很高的。而且delegate是經(jīng)典設(shè)計(jì)模式也就是大部分的語言都可以實(shí)現(xiàn)的模式,相對(duì)block出現(xiàn)比較早。 block出棧需要將使用的數(shù)據(jù)從棧內(nèi)存拷貝到堆內(nèi)存,當(dāng)然對(duì)象的話就是加計(jì)數(shù),使用完或者block置nil后才消除。deleg...

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
1.從源頭上理解和區(qū)別block和delegate
delegate運(yùn)行成本低,block的運(yùn)行成本高。
block出棧需要將使用的數(shù)據(jù)從棧內(nèi)存拷貝到堆內(nèi)存,當(dāng)然對(duì)象的話就是加計(jì)數(shù),使用完或者block置nil后才消除。delegate只是保存了一個(gè)對(duì)象指針,直接回調(diào),沒有額外消耗。就像C的函數(shù)指針,只多做了一個(gè)查表動(dòng)作。
2.從使用場景區(qū)別block和delegate
有多個(gè)相關(guān)方法。假如每個(gè)方法都設(shè)置一個(gè) block, 這樣會(huì)更麻煩。而 delegate 讓多個(gè)方法分成一組,只需要設(shè)置一次,就可以多次回調(diào)。當(dāng)多于 3 個(gè)方法時(shí)就應(yīng)該優(yōu)先采用 delegate。當(dāng)1,2個(gè)回調(diào)時(shí),則使用block。
delegate更安全些,比如: 避免循環(huán)引用。使用 block 時(shí)稍微不注意就形成循環(huán)引用,導(dǎo)致對(duì)象釋放不了。這種循環(huán)引用,一旦出現(xiàn)就比較難檢查出來。而 delegate 的方法是分離開的,并不會(huì)引用上下文,因此會(huì)更安全些。
- 3 回答
- 0 關(guān)注
- 784 瀏覽
添加回答
舉報(bào)