協(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 定義

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

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

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 前綴表示借口

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

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文件

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

