block 和 delegate 都可以通知外面择镇。block 更輕型,使用更簡單影暴,能夠直接訪問上下文错邦,這樣類中不需要存儲臨時數(shù)據(jù),使用 block 的代碼通常會在同一個地方型宙,這樣讀代碼也連貫撬呢。delegate 更重一些,需要實現(xiàn)接口妆兑,它的方法分離開來魂拦,很多時候需要存儲一些臨時數(shù)據(jù),另外相關(guān)的代碼會被分離到各處箭跳,沒有 block 好讀晨另。
應(yīng)該優(yōu)先使用 block。而有兩個情況可以考慮 delegate谱姓。
有多個相關(guān)方法借尿。假如每個方法都設(shè)置一個 block, 這樣會更麻煩。而 delegate 讓多個方法分成一組屉来,只需要設(shè)置一次路翻,就可以多次回調(diào)。當(dāng)多于 3 個方法時就應(yīng)該優(yōu)先采用 delegate茄靠。
為了避免循環(huán)引用茂契,也可以使用 delegate。使用 block 時稍微不注意就形成循環(huán)引用慨绳,導(dǎo)致對象釋放不了掉冶。這種循環(huán)引用,一旦出現(xiàn)就比較難檢查出來脐雪。而 delegate 的方法是分離開的厌小,并不會引用上下文,因此會更安全些战秋。