在這里我們要走出一個誤區(qū)誉帅,就是代理不是像kvo或kvc一樣观蓄,代理是一種設(shè)計模式它的核心是<協(xié)議>秧荆。
那它的核心是協(xié)議谭企,那么我們下一步就來講講協(xié)議廓译。
protocol(協(xié)議),protocol類似java中的interface,主要是用來定義一套對象之間的通信規(guī)則债查。protocol也是我們設(shè)計時常用的一個東西非区,相對于直接繼承的方式,protocol則偏向于組合模式盹廷。也可以理解為protocol就是一系列不屬于任何類的方法的列表(這句話很重要)征绸。這里還有兩個關(guān)鍵字,@required和@optional,一個是必須實現(xiàn)的管怠,一個是可選的淆衷。可以根據(jù)名字直接判斷渤弛。
明白了協(xié)議概念那么我們下面就通過講解在oc中怎么使用協(xié)議來充分理解這種設(shè)計模式祝拯。
首先,我們?yōu)槭裁匆?h去創(chuàng)建一個協(xié)議呢她肯,這是因為.h里面的東西都是公有的佳头,只要你在頭里引入了這個類你就能拿到。這就對應(yīng)為我們的兩個類搭建了一個橋路晴氨。如下圖:
那創(chuàng)建個完了我們是不是就該考慮這里的協(xié)議讓誰來用呢康嘉,還要考慮的是能做到隔山發(fā)命令,我這邊能收到命令籽前。
首先第一步是解決讓誰來用的問題亭珍,讓別人來用首先就要讓別人拿到協(xié)議,所以我就要把這個協(xié)議給暴露出去枝哄。oc在這里的處理就很巧妙通過一個申明一個屬性一樣的形式將協(xié)議變成屬性的類名块蚌,這樣外面就可以拿到協(xié)議了,而且還解決了讓協(xié)議給誰用的問題膘格。就是在外面通過點語法引入使用對象這樣就鎖定了使用者峭范。如圖將協(xié)議創(chuàng)建成屬性:
引入?yún)f(xié)議:
確定協(xié)議的使用權(quán):
使用協(xié)議里的方法: