Block介紹(一)基礎

2021-06-18 13:01:14 字數 1530 閱讀 5846

block是c級別的語法和執行時特性。block比較類似c函式,但是block比之c函式,其靈活性體現在棧記憶體、堆記憶體的引用,我們甚至可以將乙個block作為引數傳給其他的函式或者block。

先看乙個比較簡單的block例子:

int multiplier = 7;

int (^myblock)(int) = ^(int num) ;

在這個例子中,myblock是乙個block變數,它接受乙個int型別的引數,返回乙個int型別的值。是不是很像c函式?

來,讓我們typedef一下

typedef void (^boolblock)(bool);//乙個只接受乙個bool引數,沒有返回值的block

typedef int (^intblock)(void);//乙個沒有引數,返回int的block

typedef boolblock (^hugeblock)(intblock);//看看,這個hugeblock的引數和返回值都是block

注意,上面的typedef都還有效~

主動呼叫一下:
- (void)somemethod

; ablock();

}

作為引數返回:
typedef void (^boolblock)(bool);

- (boolblock)foo()

; return [[ablock copy] autorelease];//一定要copy,將其複製到堆上,更詳細的原理,將在後續章節講解

}

類的乙個成員:
@inte***ce obj1 : nsobject

@property (nonatomic, copy)boolblock block;//理由同上啊,同學們

@end

obj1 *obj1 = ...

obj1.block = ^(bool bvalue) ;

其他函式的引數:
- (void)foo(boolblock block)

}

甚至其他block的引數:
boolblock bblock = ^(bool bv)};

hugeblock hblock = ^(boolblock bb) ;

hbolck(bblock);

啊,全域性變數!:
static int(^maxintblock)(int, int) = ^(int a, int b);

int main()

好了,你知道block大概能怎麼用了。

如果要在block內修改block外宣告的棧變數,那麼一定要對該變數加__block標記:

int main()

};}

好了,基礎很快,更詳細的內容將用來介紹深入的東西。

iOS中Block介紹(一)基礎

block是c級別的語法和執行時特性。block比較類似c函式,但是block比之c函式,其靈活性體現在棧記憶體 堆記憶體的引用,我們甚至可以將乙個block作為引數傳給其他的函式或者block。先看乙個比較簡單的block例子 int multiplier 7 int myblock int in...

iOS中Block介紹(一)基礎

ios開發block的使用指南,以及深入理解block的記憶體管理,也適用於osx開發。討論範圍 block的使用,記憶體管理,內部實現。不包含的內容 gc arc下的block記憶體,block在c 中的使用。block是c級別的語法和執行時特性。block比較類似c函式,但是block比之c函式...

iOS開發 block介紹

void viewdidload nslog 我在看電視 void chargemyiphone void void finishblock void void finishblock 第乙個void表示此block無返回值。為block type的標誌。第二個 void 表示這個block無引數。...