黑馬程式設計師 OC protocol

2021-06-29 03:30:20 字數 2576 閱讀 9950

一、 簡單使用

1. 基本用途

可以用來宣告一大堆方法(不能宣告成員變數)

只要某個類遵守了這個協議,就相當於擁有這個協議中的所有方法宣告

只要父類遵守了某個協議,就相當於子類也遵守了

格式 協議的編寫

@protocol 協議名稱

// 方法宣告列表

@end

某個類遵守協議

@inte***ce 類名 : 父類 《協議名稱》

@end

關鍵字

協議中有2個關鍵字可以控制方法是否要實現(預設是@required),在大多數情況下,用途在於程式設計師之間的交流

@required:這個方法必須要實現(若不實現,編譯器會發出警告)

@optional:這個方法不一定要實現

協議遵守協議

乙個協議可以遵守其他多個協議,多個協議之間用逗號 , 隔開

乙個協議遵守了其他協議,就相當於擁有了其他協議中的方法宣告

@protocol 協議名稱 《協議1, 協議2>

@end

基協議

nsobject是乙個基類,最根本最基本的類,任何其他類最終都要繼承它

其實還有乙個協議,名字也叫nsobject,它是乙個基協議,最根本最基本的協議

nsobject協議中宣告很多最基本的方法,比如description、retain、release等

建議每個新的協議都要遵守nsobject協議

定義變數時指定協議

// nsobject型別的物件,並且要遵守nscopying協議

nsobject *obj;

// 任何oc物件,並且要遵守nscoding協議

id obj2;

//

// main.m

/* 1.協議的定義

@protocol 協議名稱 // 方法宣告列表....

@end

2.如何遵守協議

1> 類遵守協議

@inte***ce 類名 : 父類名 《協議名稱1, 協議名稱2>

@end

2> 協議遵守協議

@protocol 協議名稱 《其他協議名稱1, 其他協議名稱2>

@end

3.協議中方法宣告的關鍵字

1> @required (預設)

要求實現,如果沒有實現,會發出警告

2> @optional

不要求實現,怎樣不會有警告

4.定義乙個變數的時候,限制這個變數儲存的物件遵守某個協議

類名《協議名稱》 *變數名;

id《協議名稱》 變數名;

nsobject*obj;

idobj2;

如果沒有遵守對應的協議,編譯器會警告

5.@property中宣告的屬性也可用做乙個遵守協議的限制

@property (nonatomic, strong) 類名《協議名稱》 *屬性名;

@property (nonatomic, strong) id《協議名稱》 屬性名;

@property (nonatomic, strong) dog*dog;

@property (nonatomic, strong) iddog2;

6.協議可用定義在單獨.h檔案中,也可用定義在某個類中

1> 如果這個協議只用在某個類中,應該把協議定義在該類中

2> 如果這個協議用在很多類中,就應該定義在單獨檔案中

7.分類可用定義在單獨.h和.m檔案中,也可用定義在原來類中

1> 一般情況下,都是定義在單獨檔案

2> 定義在原來類中的分類,只要求能看懂語法

*/#import

#import "myprotocol.h"

#import "myprotocol3.h"

#import "person.h"

#import "dog.h"

#import "hashiqi.h"

int main()

void test()

二、 **設計模式

1. 設計原理

有些麻煩的事情不想自己親自做,就可以找個人幫忙做,即交給**物件去做

設計原則

首先得擁有某個**物件屬性

其次要很清楚**有哪些方法

最後要保證能解耦

實現方案

定義乙個protocol,在其中宣告一些和**溝通的方法

擁有乙個**屬性id delegate

讓**遵守protocol

//

// main.m

// 07-協議的應用-**模式

////

#import

#import

"person.h"

#import

"agent.h"

#import

"nextagent.h"

int main(int argc, const

char * argv)

return0;}

void test()

黑馬程式設計師

asp.net android ios開發 net培訓 期待與您交流!map hashtable 底層是雜湊表資料結構,不可以存入null鍵和null值。該執行緒是同步的,jdk1.0出現,效率低。hashmap 底層是雜湊表資料結構,允許使用null鍵和null值。該集合執行緒是不同步的,將has...

黑馬程式設計師

1.了解反射 反射 就是通過class檔案物件,去使用該檔案中的成員變數,構造方法,成員方法。person p new person p.使用 要想這樣使用,首先你必須得到class檔案物件,其實也就是得到class類的物件。2.反射中的類 class類 成員變數 field類 構造方法 const...

黑馬程式設計師

黑馬程式設計師 j a基礎學習筆記2 一 筆記內容概述 關鍵字 識別符號 注釋 注釋的應用 常量 進製的由來 進製轉換 負數的進製 變數的介紹 變數的基本演示 型別提公升 強制轉換 字元型別運算過程 型別運算細節 算術運算子 賦值運算子。二 常用內容介紹 1.注釋內容不占用記憶體,即使新增再多的注釋...