在不同類之間傳遞數(shù)據(jù),我所學(xué)到的有三種,1.代理,2.block,3.通知。在這里,我們先來講一下代理的使用,后面我會(huì)繼續(xù)講到block和通知。代理通常和協(xié)議是一起使用的,協(xié)議通常寫在代理類里面,被代理的類要服從協(xié)議。

  根據(jù)我的理解,在這種情況下:一個(gè)類里面的數(shù)據(jù)需要在另一個(gè)類里面實(shí)現(xiàn)改變,具體一點(diǎn):在一個(gè)手機(jī)程序里面,一個(gè)界面的數(shù)據(jù)在另外一個(gè)界面中實(shí)現(xiàn)改變,然后再回調(diào)給這個(gè)界面,使這個(gè)界面的數(shù)據(jù)也發(fā)生改變,這時(shí)就會(huì)用到代理。

  首先,來了解一下協(xié)議的使用,首先創(chuàng)建一個(gè)command Line Tool工程,創(chuàng)建完成后是這樣的:

  在協(xié)議這個(gè)類中我們只需要申明方法,不用實(shí)現(xiàn),方法的實(shí)現(xiàn)應(yīng)該在服從這個(gè)協(xié)議的類里面,協(xié)議里面的方法的種類分兩種,即required和optional,用required修飾的方法在服從這個(gè)協(xié)議的類里面必須實(shí)現(xiàn),而用optional修飾的方法可以不實(shí)現(xiàn),現(xiàn)在我們來創(chuàng)建一個(gè)專門定義協(xié)議的類名為Test,

  在這個(gè)類里面定義一套協(xié)議,如下:

  自己定義的協(xié)議也要服從上一級(jí)協(xié)議NSObject協(xié)議,在協(xié)議里面我定義了一個(gè)方法,而且是要求被實(shí)現(xiàn)的,接下來我們創(chuàng)建另外一個(gè)類名為Person。

  在這個(gè)類的頭文件里面服從我們上面定義的協(xié)議,我們要使用這個(gè)協(xié)議就必須在Person類的頭文件里面導(dǎo)入Test.h,

  同時(shí),我們?cè)赑erson.h里面定義一個(gè)屬性變量名為name,然后在Person.m里面實(shí)現(xiàn)我們?cè)趨f(xié)議里面定義的doSomething方法

  在main函數(shù)里面實(shí)現(xiàn)如下代碼并運(yùn)行,

  這樣我們就完成了整個(gè)協(xié)議。

  接下來,我們來看一下代理的實(shí)現(xiàn)方法,在這里,我們先不使用協(xié)議,

首先創(chuàng)建一個(gè)代理類(這里代理類同時(shí)有.h和.m文件),取名為Agent。

再創(chuàng)建一個(gè)Person類,作為被代理的類。

  在這里既然有兩個(gè)類,我們就可以將他們假設(shè)為兩個(gè)獨(dú)立的對(duì)象,一個(gè)為介紹租房子的中介(代理類),一個(gè)是在外打拼需要租房子的人(Person類)。

根據(jù)現(xiàn)實(shí)中的情況,完成租房子這件事情,第一,要租房子的人(假設(shè)租房子的人叫小王,下面直接稱為小王)發(fā)出租房子這意愿,具體實(shí)現(xiàn)如下:租房子首先我們需要找到一個(gè)中介,然后告訴中介小王的信息(讓中介知道是誰讓他租房子),最后中介去找房子。轉(zhuǎn)換成代碼如下:

在Person類的頭文件里面定義一個(gè)方法名為needHouse:,在這里我們可以對(duì)中介提一些要求,用參數(shù)的形式傳遞給中介

 

然后實(shí)現(xiàn)這個(gè)方法(這里畫個(gè)重點(diǎn))

在此時(shí)中介類的頭文件里面的代碼是這樣的,實(shí)現(xiàn)文件里面還沒有代碼

第二步,就是中介去租房子并把結(jié)果告訴小王,小王希望中介通過電話的形式告訴他,所以就要在Person類里面定義一個(gè)聯(lián)系的方法名為useTellphone(在第二步我們要做的事有兩件,1.實(shí)現(xiàn)中介的rentHouse方法,2.通過useTellphone方法把結(jié)果告訴小王并把結(jié)果輸出)。

rentHouse方法的實(shí)現(xiàn):

輸出結(jié)果的實(shí)現(xiàn):

主函數(shù)調(diào)用needHouse方法并運(yùn)行:

  就這樣代理的方法就實(shí)現(xiàn)了!

   但是如果有很多人都找這個(gè)中介租房子,每個(gè)人都希望用他們自己常用的聯(lián)系方式聯(lián)系他(比如,一個(gè)想用電話,另外一個(gè)人想用qq,還有人想用郵箱),這樣中介就有的忙了,此時(shí),如果由中介來規(guī)定聯(lián)系人的方式,租房子的人必須使用這種方法,就方便了許多。

  我們可以用協(xié)議的方法解決上面的問題,我們只要在代理類里面定義一個(gè)協(xié)議,在協(xié)議里面寫明聯(lián)系的方式(比如都使用電話),要求在他這里租房子的人必須遵守這個(gè)協(xié)議就可以了;

   綜合上面的講的,可以嘗試把整個(gè)代理完成,我會(huì)在下一篇的開始附上代理的所有代碼。