block和delegate 使用的區別
3 回答

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

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