OC學習筆記十 Block與 protocol

2021-06-28 11:27:53 字數 2617 閱讀 9679

block是一種資料型別,封裝了一段**

,可以在任何時候執行。

block

可以在程式執行時儲存一段**(函式不行)。block

跟函式一樣,有返回值,形參。

block:

以「^」表示一段

block

block變數:

以「返回值型別 (^block

名稱)(

形參型別

)」表示乙個

block

型別的變數。和以前學過的

c語言的指向函式的指標很像。如果沒有形參,則

(形參型別

)可以省略。

用block

變數呼叫

block

裡面的內容:

block名稱

();沒有返回值和形參的block:

帶形參和返回值的block:

每次我們要定義乙個block

型別變數,都要寫一大串**,利用

c語言中的

typedef

函式可以簡化我們的定義。

#import typedef int (^myblock)(int, int);

int main(int argc, const char * argv)

; nslog(@"%d", sumblock(3, 6));

return 0;

}

預設情況下,block

對外面變數是唯讀的,如果想要某個變數能在

block

內部修改,需要在變數前加上

__block

關鍵字。如

__block int sum = 10;

protocol是意思是協議。在計算機網路課程中,我們學過各種網路協議。

oc中的

@protocol

可以模擬著學習,

protocol在oc

中的作用就是宣告一堆方法。

和建立類類似,右擊專案,在new file

中選擇objective-c protocol

,然後給協議取個名字即可。

1)協議的編寫:

@protocol 協議名稱

@關鍵字

方法宣告

@end

關鍵字有@required

和@optional

@required要求遵守協議的類必須實現,

@optional

是可選實現,預設是

@required

2)某個類遵守協議(可遵守多個):

@inte***ce 類名 : 父類

協議名稱

1,協議名稱

2>

@end

和類的繼承、基類類似,乙個協議遵守了其他協議,就相當於擁有了其他協議中的方法宣告,和類不同的是,乙個協議可以遵守多個協議。

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

>

@end

和基類一樣,基協議名稱也叫nsobject

。開啟nsobject.h

發現裡面有我們記憶體管理方法的宣告,可是我們之前學記憶體管理的時候沒有用過基協議呀?

那是因為,基類本身繼承了基協議,我們繼承基類,也就預設遵守了基協議。

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

nsobject*obj;

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

idobj;

// 呼叫set方法要遵守myprotocol協議

@property (nonatomic, strong) idobj;

當賦值給obj的物件不遵守

myprotocol

時,編譯器就會發出嚴重警告

最後需要補充的是,在類裡面我們學過,如果編譯器不需要用到類裡面的內容,只需要知道它是乙個類,使用@class

關鍵字。協議同樣也有這種用法,在只需要知道協議的地方不用

#import

,使用@protocol

,在真正用到協議裡面方法宣告的檔案裡,才用

#import。

OC學習筆記之block

一 什麼是block block是oc中的乙個資料型別,但是它很特別,因為它是用來儲存一段 的 可以理解為把一段 賦值給block型別的變數 它和函式有點相似,它可以帶引數,可以有返回值,呼叫方式也一樣。二 定義乙個不帶形參沒有返回值的block main.m block created by 葬花...

OC學習筆記(1) block

斷斷續續,今天又開始學oc了 今天的內容是 block block 是用來儲存一段 block 的標記是 block 和 其它語言的函式很像 1.可以儲存 2.有返回值 3.有形參 4.呼叫方式一樣 定義 block 變數的方法如下 void myblock int c sumblock 10,20...

Oc課堂筆記 Block塊

block塊 可以傳到任何地方使用 託字元 1.無返回值 無引數的block void myblock myblock 2.有返回值有引數 nsinteger sumblock nsinteger,nsinteger nsinteger num1,nsinteger num2 sumblock 10...