一、協(xié)議(protocol)的基本概念? ??
1、協(xié)議的聲明看起來比較類似一個類的接口文件,不同的是協(xié)議沒有父類也不能定義實(shí)例變量。? ? ? 協(xié)議里面存放著方法的聲明,在該文件中并沒有實(shí)現(xiàn),誰遵守協(xié)議誰實(shí)現(xiàn)方法??
? 2、協(xié)議是一種特殊的程序設(shè)計結(jié)構(gòu),用于聲明專門被別的類實(shí)現(xiàn)的方法,協(xié)議在以下場合非常有用:? ? ??
?1)需要由別的類實(shí)現(xiàn)的方法? ? ?
?2)聲明未知類的接口? ? ?
?3)兩個雷之間的通信? ??
3、協(xié)議的基本特點(diǎn)? ? ?
?1)協(xié)議可以被任何類實(shí)現(xiàn)方法,協(xié)議本身不是類,他是定義了一個其他類可實(shí)現(xiàn)的接口,類目也可以采用協(xié)議? ? ? ?
?2)協(xié)議的關(guān)鍵字? ? ? ? ?
?@required:表示必須強(qiáng)制實(shí)現(xiàn)的方法? ? ? ? ?
?@optional:表示可以有選擇性的實(shí)現(xiàn)方法? ? ?
?3)實(shí)現(xiàn)的聲明與實(shí)現(xiàn)? ? ? ? ??
/* 協(xié)議的聲明 */? ? ? ??
? @protocol HelloProtocol<NSObject>
@optional ?
- (void)optionalMethod1; ? ? ? ? ?
- (void)optionalMethod2;? ? ? ? ?
?@required? ? ? ? ?
?- (void)requiredMethod1;? ? ? ? ?
?@end? ? ? ? ??
/* 協(xié)議的實(shí)現(xiàn) */? ? ? ? ??
@implementation Person? ? ? ? ??
- (void)requiredMethod1 {? ? ? ? ?
?} // 實(shí)現(xiàn)了該協(xié)議中的方法,且方法必須實(shí)現(xiàn)? ? ? ? ?
?- (void)optionalMethod1 {? ? ? ? ??
?} // 實(shí)現(xiàn)了該協(xié)議中的方法,可以選擇不實(shí)現(xiàn)? ? ? ? ?
?@end? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?/* 采用了該協(xié)議 */? ? ? ? ?
?@interface Person : NSObject
@end
二、委托(代理)設(shè)計模式 兩個對象協(xié)同解決問題,通常用于對象之間的通信
1、指一個對象提供機(jī)會對另一個對象中的行為發(fā)生變化時做出的反應(yīng)
如:當(dāng)將一顆石子(對象1)丟入水中(行為發(fā)生變化,之前可能在你的手中)時,水面(對象2)泛起波紋(做出的反應(yīng))
2、基本思想:
兩個對象協(xié)同解決問題,通常用于對象之間的通信
3、基本特點(diǎn):
1)簡化了對象的行為,最小化了對象之間的耦合度
2)使用代理,一般來說無需子類化
3)簡化了應(yīng)用程序開發(fā),既容易實(shí)現(xiàn),又靈活
三、 示例:中介找房
1、假設(shè)有一個Jack的人(Person),他想租一套公寓(Apartment),由于他工作繁忙(或者其他原因),沒有時間(或者自身沒有能力)去租房。因此,他委托中介公司(Agent)幫他尋找房源,找到合適的房源告知Jack。
2、補(bǔ)充
1)定時器
一旦創(chuàng)建了一個定時器對象(NSTimer實(shí)例),他可以按照一定時間的間隔,將指定消息發(fā)送到目標(biāo)對象,并更新某個對象的行為,你可以選擇在未來的某個時候?qū)⑺?開啟",或者將它停止乃至銷毀。
2)NSRunloop
一個runloop就是一個事件處理的循環(huán),用來不斷的調(diào)度工作以及處理輸入事件,使用runloop的目的是讓你的線程在有工作的時候忙于工作,而沒有工作的時候處于休眠狀態(tài)
在我們的應(yīng)用程序中,不需要創(chuàng)建NSRunloop對象,因?yàn)椋谖覀兊闹骶€程中(包含其他子線程)系統(tǒng)會自動穿件NSRunloop對象,如果需要訪問當(dāng)前線程中的runloop,你可以通過類方法『currentRunloop』獲取到