最近一直在忙著準備暑期的實習面試,所以最近開始復習OC基礎知識。偷得半日閑,總結下面試考濫了的delegate和notification。
此兩君的不同主要體現在以下兩個方面:
代碼耦合性
Notifications: “一對多”,松耦合
這是因為,發送notification的對象并不知道誰需要這個notification。松耦合帶來的好處是可以用notification實現“一對多”的功能,讓許多不同的對象能夠監聽相同的notification;壞處是會給debug帶來不便,因為一旦發送notification的對象做出了改變,會影響到所有監聽此notification的對象。debug起來將會是相當痛苦的一件事。
Delegates: “一對一”,緊耦合
這是因為, delegating 對象具有其 delegate 的直接引用(例如:_tableView.delegate = self;
這里_tableView是delegating對象,self是delegate對象)。所以delegating對象知道是否有delegate對象,并且可以通過內省(introspection)方式知道它的delegate實現了哪些方法。
數據流向
Notifications: 單方向
Notification 是一個主動的過程,只負責發送出某個信息。并不關心接收者是誰。
Delegates: 雙方向
在Delegates模式中,數據可以從delegating流向delegate ,也可以從delegate流向delegating。這里最典型的就是tableView的情況了,在tableView中,dataSource就是一個數據從delegate流向delegating的過程,delegate就是數據從delegating流向delegate的過程。