最近一直在忙著準備暑期的實習(xí)面試匣吊,所以最近開始復(fù)習(xí)OC基礎(chǔ)知識。偷得半日閑,總結(jié)下面試考濫了的delegate和notification色鸳。
此兩君的不同主要體現(xiàn)在以下兩個方面:
代碼耦合性
Notifications: “一對多”社痛,松耦合
這是因為,發(fā)送notification的對象并不知道誰需要這個notification命雀。松耦合帶來的好處是可以用notification實現(xiàn)“一對多”的功能蒜哀,讓許多不同的對象能夠監(jiān)聽相同的notification;壞處是會給debug帶來不便,因為一旦發(fā)送notification的對象做出了改變吏砂,會影響到所有監(jiān)聽此notification的對象撵儿。debug起來將會是相當痛苦的一件事。
Delegates: “一對一”狐血,緊耦合
這是因為淀歇, delegating 對象具有其 delegate 的直接引用(例如:_tableView.delegate = self;
這里_tableView是delegating對象,self是delegate對象)匈织。所以delegating對象知道是否有delegate對象浪默,并且可以通過內(nèi)省(introspection)方式知道它的delegate實現(xiàn)了哪些方法缀匕。
數(shù)據(jù)流向
Notifications: 單方向
Notification 是一個主動的過程纳决,只負責發(fā)送出某個信息。并不關(guān)心接收者是誰乡小。
Delegates: 雙方向
在Delegates模式中,數(shù)據(jù)可以從delegating流向delegate 阔加,也可以從delegate流向delegating。這里最典型的就是tableView的情況了满钟,在tableView中掸哑,dataSource就是一個數(shù)據(jù)從delegate流向delegating的過程,delegate就是數(shù)據(jù)從delegating流向delegate的過程零远。