1.協(xié)議:用于聲明專門被別的類實現(xiàn)的方法红省。協(xié)議本身不是類额各,定義其他類可以實現(xiàn)的接口(方法)
說明:1.一個協(xié)議可以擴展自另一個協(xié)議,一般擴展自NSObject吧恃,需要擴展自多個協(xié)議中間用逗號分隔虾啦。
? ? ? ? ? ? 2.修飾協(xié)議方法的關(guān)鍵字:@require(必須實現(xiàn)),@optional(可選擇實現(xiàn))痕寓。默認是require傲醉。
? ? ? ? ? ? 3.一個類可以實現(xiàn)多個協(xié)議。
? ? ? ? ? ? ?4.協(xié)議的實現(xiàn)在聲明上呻率,不能放到類的實現(xiàn)上(也就是說必須寫成@interface Person:NSObject而不能寫成@implementation Person)硬毕。
? ? ? ? ? ? ? 5.協(xié)議中不能定義屬性、成員變量等礼仗,只能定義方法吐咳。
作用:1.統(tǒng)一接口
? ? ? ? ? 2.模擬實現(xiàn)多繼承(總的來說單繼承可以繼承父類的屬性方法并且不用重寫父類方法可以使用逻悠。一個類中可以遵守多個協(xié)議實現(xiàn)多繼承,只能繼承方法韭脊,并且要重寫實現(xiàn)協(xié)議方法)
? ? ? ? ? 3.實現(xiàn)委托代理
2.委托:主動方童谒,持有帶協(xié)議的id指針,可以使用協(xié)議
說明:1.代理屬性沪羔,同時約定作為代理的對象必須實現(xiàn)協(xié)議 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@property(nonatomic,weak) id<協(xié)議名字> ??delegate; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id可以表示任何一個Object對象類型饥伊。
? ? ? ? ? ? 2.用weak 修飾id 指針防止循環(huán)引用內(nèi)存泄漏? ? ? ,原因:id 指針指的是代理方蔫饰,委托方在代理方創(chuàng)建對象實現(xiàn)協(xié)議方法時會引用計數(shù)加1琅豆,被代理方所擁有,如果委托方用strong 修飾再擁有代理方就會循環(huán)引用 ? ? ? ? ? ? ? ? ? ? ??
3.代理方:被動方篓吁,遵從協(xié)議茫因,實現(xiàn)協(xié)議中的方法