類(lèi)目、延展、代理的定義:
<一>類(lèi)目:Category:也叫分類(lèi),類(lèi)目是為了沒(méi)有源代碼的類(lèi)擴(kuò)充功能的,擴(kuò)充的功能會(huì)成為原有類(lèi)的一部分,可以通過(guò)原有類(lèi)或者原有類(lèi)的對(duì)象直接調(diào)用,并且繼承。該方法只能擴(kuò)充方法,不能擴(kuò)充實(shí)力變量(這就是類(lèi)目和延展的區(qū)別)類(lèi)目能不能添加實(shí)例變量?
<二>延展:是聲明在.m文件中,是為能夠獲得源代碼的類(lèi)創(chuàng)建私有方法和實(shí)例變量的。延展更重的是有一個(gè)目錄功能
<三>設(shè)置代理步驟:(A是老板,B是代理)
第一步:A創(chuàng)建了一份協(xié)議,協(xié)議里有2個(gè)方法需要實(shí)現(xiàn),這時(shí)就得設(shè)置一個(gè)代理屬性id<協(xié)議名>代理的名字 。這塊的id表示所有類(lèi)型都可以成為代理。
第二步:B是遵守協(xié)議的,也就是A的代理,在成為代理之前,B必須先導(dǎo)入具有協(xié)議的頭文件,然后再簽訂A創(chuàng)建的協(xié)議:NSObject后加<協(xié)議名>協(xié)議屬性里的修飾用assign,這樣是防止循環(huán)引用的(協(xié)議方法面試時(shí)是需要手寫(xiě)的)
第三步:B簽訂協(xié)議后,就可以在.m文件中去實(shí)現(xiàn)協(xié)議里的方法了
第四步:B把協(xié)議里的方法實(shí)現(xiàn)后,A就可以在自己的.m文件中寫(xiě)兩個(gè)與協(xié)議里對(duì)應(yīng)的方法來(lái)讓代理實(shí)現(xiàn)具體實(shí)現(xiàn)如下:在實(shí)現(xiàn)方法之前我們得加以判斷,看該方法是否已經(jīng)實(shí)現(xiàn),如果沒(méi)有實(shí)現(xiàn),我們?cè)趯?shí)現(xiàn),否則不實(shí)現(xiàn),這樣的話,就是比較安全。
第五步:在主函數(shù)中創(chuàng)建對(duì)象,實(shí)現(xiàn)方法
1、先創(chuàng)建A對(duì)象
2、在創(chuàng)建B對(duì)象
3、將B最終設(shè)置為A的代理:
Boss *boss = [[Boss alloc]init];
Student *stu = [[Student alloc]init];
stu.name = @"zhansan";
boss.delegte = stu;//設(shè)置代理
[boss careApp];在這塊調(diào)用的是自己的方法,因?yàn)樵谶@個(gè)方法里面已經(jīng)讓代理去操作了,所以整件事情的過(guò)程是代理去實(shí)現(xiàn)的,但是最終展示結(jié)果的是老板[boss coding];