3 回答

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

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