Objective-C 協(xié)議、block、Category

協(xié)議protocol

在ObjC中使用@protocol定義一組方法規(guī)范,實(shí)現(xiàn)此協(xié)議的類必須實(shí)現(xiàn)對(duì)應(yīng)的方法.
oc 中定義協(xié)議一般使用Delegate后綴(表示委托代理之意)@required 修飾的方法必須現(xiàn)實(shí),@optional 修飾的為可選方法,默認(rèn)沒有修飾符。

AnimalDelegate 定義

AnimalDelegate.png

People.h 實(shí)現(xiàn)協(xié)議 在父類后面使用 <Delegate1,Delegate2>

People.h

People.m 實(shí)現(xiàn)類中

People.m

1.一個(gè)協(xié)議可以擴(kuò)展自另一個(gè)協(xié)議,例如上面AnimalDelegate就擴(kuò)展自NSObject,如果需要擴(kuò)展多個(gè)協(xié)議中間使用逗號(hào)分隔;
2.和其他高級(jí)語言中接口不同的是協(xié)議中定義的方法不一定是必須實(shí)現(xiàn)的,我們可以通過關(guān)鍵字進(jìn)行@required和@optional進(jìn)行設(shè)置,如果不設(shè)置則默認(rèn)是@required(注意ObjC是弱語法,即使不實(shí)現(xiàn)必選方法編譯運(yùn)行也不會(huì)報(bào)錯(cuò));
3.協(xié)議通過<>進(jìn)行實(shí)現(xiàn),一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)協(xié)議,中間通過逗號(hào)分隔;
4.協(xié)議的實(shí)現(xiàn)只能在類的聲明上,不能放到類的實(shí)現(xiàn)上(也就是說必須寫成@interface Person:NSObject<AnimalDelegate>而不能寫成@implementation Person<AnimalDelegate>);
5.協(xié)議中不能定義屬性、成員變量等,只能定義方法;

java 中稱為借口,使用關(guān)鍵字 interface。
使用 I 前綴表示借口

IAnimal

使用 implements 關(guān)鍵字表示實(shí)現(xiàn)一個(gè)接口,多接口使用逗號(hào)隔開。接口的方法在實(shí)現(xiàn)類中都需要重寫

People

block

block 對(duì)應(yīng)于java中的函數(shù)回調(diào)

Block類型定義:返回值類型(^ 變量名)(參數(shù)列表)
注意Block也是一種類型);

Block的typedef定義:
返回值類型(^類型名稱)(參數(shù)列表)

Block的實(shí)現(xiàn):^(參數(shù)列表){操作主體}

Block中可以讀取塊外面定義的變量但是不能修改,如果要修改那么這個(gè)變量必須聲明_block修飾;

分類Category

不改變原有代碼為一個(gè)類擴(kuò)展其他功能時(shí)我們可以考慮繼承這個(gè)類進(jìn)行實(shí)現(xiàn),但是這樣一來使用時(shí)就必須定義成新實(shí)現(xiàn)的子類才能擁有擴(kuò)展的新功能。利用分類,我們就可以在ObjC中動(dòng)態(tài)的為已有類添加新的行為(特別是系統(tǒng)或框架中的類)(java 沒有此特性)

去掉字符串前后的空格
創(chuàng)建一個(gè)NSString 的 Category ,名稱為Extends,xcode會(huì)生成 NSString+Extends 的.h .m文件

NSString+Extends.h

使用時(shí) #import "NSString+Extends.h"

NSString+Extends.m
NSString+Extends.m
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 禪與 Objective-C 編程藝術(shù) (Zen and the Art of the Objective-C C...
    GrayLand閱讀 1,783評(píng)論 1 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,632評(píng)論 19 139
  • 人在他鄉(xiāng) 走在寬闊的馬路上 我邊走邊想 想我那久違的故鄉(xiāng) 想我那年邁的爹娘 人在他鄉(xiāng) 走在擁擠的人群間 看夕陽西下...
    高能故事閱讀 259評(píng)論 0 0
  • 所有的我從北方趕來 所有的你從南方赴約 南與北在我們的身體中交匯 所有的我看到你血液中的渴望 所有的你看到我皮膚里...
    鹿小姐在1896閱讀 386評(píng)論 3 7

友情鏈接更多精彩內(nèi)容