先上圖
協(xié)議:制定雙方責(zé)任(方法或?qū)傩裕?/p>
委托方:按照協(xié)議提出需求
代理方:按照協(xié)議完成需求拒贱,并返回結(jié)果
iOS對象不支持多繼承渊季,協(xié)議可繼承
協(xié)議有兩個修飾符@optional和@required,創(chuàng)建一個協(xié)議如果沒有聲明,默認(rèn)是@required狀態(tài)的。這兩個修飾符只是約定代理是否強(qiáng)制需要遵守協(xié)議嫉到,如果@required狀態(tài)的方法代理沒有遵守,會報(bào)一個黃色的警告月洛,只是起一個約束的作用何恶,沒有其他功能。
無論是@optional還是@required嚼黔,在委托方調(diào)用代理方法時(shí)都需要做一個判斷导而,判斷代理是否實(shí)現(xiàn)當(dāng)前方法忱叭,否則會導(dǎo)致崩潰。
//?判斷代理對象是否實(shí)現(xiàn)這個方法今艺,沒有實(shí)現(xiàn)會導(dǎo)致崩潰
if ([self.delegaterespondsToSelector@s:electoruse(rLoginWithUsernamepass:word:)])
{
[self.delegate?userLoginWithUsername:self.username.text?password:self.password.text];
}
在iOS中代理本質(zhì)是代理內(nèi)存的傳遞和操作