ios 中的程式塊(Block)

2022-08-05 12:09:15 字數 998 閱讀 7334

block是一個自包含的小**段,封裝了用於遍歷(線性遍歷)或者**,可以併發執行的任務單元。

__block int mycount = 0;

int (^myblock)(int a,int b) = ^(int a,int b);

nslog(@"myblock = %d",myblock(1,2));

1

int (^myblock)(int a,int

b);2

3 myblock = ^(int a,int

b);

1

int jg = ^(int a) (3

);2 nslog(@"

jg = %d

",jg);

後面小括號裡的3 會被當成a的輸入值,然後經由block輸出3*3 = 9指定給result這個變數。

因為block也是繼承自nsobject,所以其生命週期和記憶體的管理也就非常之重要。

block一開始都是被放到stack裡,換句話說其生命週期隨著method或function結束就會被**,和一般變數的生命週期一樣。

關於記憶體的管理請遵循這幾個要點

1. block pointer的實體會在method或function結束後就會被清掉

2. 如果要儲存block pointer的實體要用-

copy

指令,這樣block pointer就會被放到heap裡

2.1 block 主體裡用到的block variable 也會被搬到heap 而有新的記憶體位置,且一並更新有用到這個block variable 的block都指到新的位置

2.2 一般的variable值會被copy 

2.3 如果主體裡用到的variable是object的話,此object會被retain, block release時也會被release

2.4 __block variable 裡用到的object是不會被retain的

iOS中block運用

在程式中 l block封裝了一段 可以在任何時候執行 lblock可以作為函式引數或者函式的返回值,而其本身又可以帶輸入引數或返回值。它和傳統的函式指標很類似,但是有區別 block是inline 行內函數 的,並且預設情況下它對區域性變數是隻讀的 同時 蘋果官方建議儘量多用block。在多執行緒 異...

IOS中block的使用方法

x 1 初探block 在這一小節我們先用一些簡單範例來匯入block的概念。 x 1 1 宣告和使用block 我們使用 運運算元來宣告一個block變數,而且在block的定義最後面要加上 來表示一個完整的述句 也就是將整個block定義視為前面章節所介紹的簡單述句,因為整個定義必須是一個完整的句...

iOS block的使用

block 是ios在4 0之後新增的程式語法,一般用於 方法,功能上和delegate類似。本文將講解block的幾種常見的使用方法,當然,block中最值得注意的還是它的記憶體管理,我將在《》中講到。 環境資訊 mac os x 10 9 5 xcode 5 1 1 ios 7 1 正文 為什麼要...