成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS中Block介紹(一)基礎(chǔ)

移動(dòng)開(kāi)發(fā) iOS
ios開(kāi)發(fā)block的使用指南,以及深入理解block的內(nèi)存管理,也適用于osx開(kāi)發(fā)。討論范圍:block的使用,內(nèi)存管理,內(nèi)部實(shí)現(xiàn)。不包含的內(nèi)容:gc arc下的block內(nèi)存,block在c++中的使用。

一、概述

Block是C級(jí)別的語(yǔ)法和運(yùn)行時(shí)特性。Block比較類似C函數(shù),但是Block比之C函數(shù),其靈活性體現(xiàn)在棧內(nèi)存、堆內(nèi)存的引用,我們甚至可以將一個(gè)Block作為參數(shù)傳給其他的函數(shù)或者Block。

二、熱身

先看一個(gè)比較簡(jiǎn)單的Block例子:

  1. int multiplier = 7; 
  2. int (^myBlock)(int) = ^(int num) { 
  3.     return num * multiplier; 
  4. }; 

在這個(gè)例子中,myBlock是一個(gè)Block變量,它接受一個(gè)int類型的參數(shù),返回一個(gè)int類型的值。是不是很像C函數(shù)?

來(lái),讓我們typedef一下

  1. typedef void (^BoolBlock)(BOOL);//一個(gè)只接受一個(gè)BOOL參數(shù),沒(méi)有返回值的block 
  2. typedef int (^IntBlock)(void);//一個(gè)沒(méi)有參數(shù),返回int的block 
  3. typedef BoolBlock (^HugeBlock)(IntBlock);//看看,這個(gè)HugeBlock的參數(shù)和返回值都是block 

三、更詳細(xì)的例子

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

主動(dòng)調(diào)用一下:

  1. - (void)someMethod 
  2.     BoolBlock ablock = ^(BOOL bValue) { 
  3.         NSLog(@"Bool block!"); 
  4.     }; 
  5.     ablock(); 

作為參數(shù)返回:

  1. typedef void (^BoolBlock)(BOOL); 
  2. - (BoolBlock)foo() 
  3.     BoolBlock ablock = ^(BOOL bValue) { 
  4.         NSLog(@"Bool block!"); 
  5.     }; 
  6.     return [[ablock copy] autorelease];//一定要copy,將其復(fù)制到堆上,更詳細(xì)的原理,將在后續(xù)章節(jié)講解 

類的一個(gè)成員:

  1. @interface OBJ1 : NSObject 
  2. @property (nonatomic, copy)BoolBlock block;//理由同上啊,同學(xué)們 
  3. @end 
  4.  
  5. OBJ1 *obj1 = ... 
  6. obj1.block = ^(BOOL bValue) { 
  7.         NSLog(@"Bool block!"); 
  8.     }; 

其他函數(shù)的參數(shù):

  1. - (void)foo(BoolBlock block) 
  2.     if (block) { 
  3.         block(); 
  4.     } 

甚至其他block的參數(shù):

  1. BoolBlock bBlock = ^(BOOL bV){if(Bv){/*do some thing*/}}; 
  2. HugeBlock hBlock = ^(BoolBlock bB) {bB();}; 
  3.  
  4. hBolck(bBlock); 

啊,全局變量!:

  1. static int(^maxIntBlock)(intint) = ^(int a, int b){return a>b?a:b;}; 
  2. int main() 
  3.     printf("%d\n", maxIntBlock(2,10));   
  4.     return 0; 

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

四,特殊的標(biāo)記,__block

如果要在block內(nèi)修改block外聲明的棧變量,那么一定要對(duì)該變量加__block標(biāo)記:

  1. int main() 
  2.     __block int i = 1024; 
  3.     BoolBlock bBlock = ^(BOOL bV) { 
  4.         if (bV) { 
  5.             i++;//如果沒(méi)有__block標(biāo)記,是無(wú)法通過(guò)編譯的。 
  6.         } 
  7.     }; 

好了,基礎(chǔ)很快,更詳細(xì)的內(nèi)容將用來(lái)介紹深入的東西。

責(zé)任編輯:閆佳明 來(lái)源: dreamingwish
相關(guān)推薦

2013-07-19 14:00:13

iOS中BlockiOS開(kāi)發(fā)學(xué)習(xí)

2013-07-19 14:35:59

iOS中BlockiOS開(kāi)發(fā)學(xué)習(xí)

2013-07-19 13:16:26

iOS中BlockiOS開(kāi)發(fā)學(xué)習(xí)內(nèi)存管理

2017-03-07 09:45:43

iOSBlock開(kāi)發(fā)

2011-08-08 18:11:45

IOS 4Block UIActionShe

2013-01-07 10:42:43

HDFS

2013-06-04 15:41:31

iOS開(kāi)發(fā)移動(dòng)開(kāi)發(fā)block

2025-01-10 09:47:43

blockSDKiOS

2022-12-15 17:31:41

架構(gòu)龍芯

2010-11-01 06:43:21

PowerShell

2011-07-14 16:26:01

2010-03-05 10:24:33

2013-03-27 10:32:53

iOS多線程原理runloop介紹GCD

2010-04-21 17:10:25

Unix信號(hào)量

2009-09-22 09:27:29

Hibernate P

2011-06-21 14:42:37

ECMAScriptJavaScript

2011-07-14 17:02:09

C++指針

2022-12-06 23:43:53

iOSCreateML應(yīng)用

2009-09-28 10:24:58

Hibernate基礎(chǔ)

2011-07-21 17:33:27

JAVA
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕视频在线 | 欧美在线日韩 | 国产在线网站 | 看片地址 | 国产一区不卡在线观看 | 992tv人人草 久久精品超碰 | 黑人性hd | 日韩一级精品视频在线观看 | 91精品国产91久久综合桃花 | 亚洲精品一区二区三区中文字幕 | 日本一区二区高清视频 | 成人精品一区二区 | 国产欧美一区二区三区久久手机版 | 国产一区二区影院 | 午夜久久久 | 毛片1| 亚洲欧洲一区二区 | 一区二区高清 | 黄色香蕉视频在线观看 | 国产精品美女久久久久aⅴ国产馆 | 日本三级电影免费观看 | 成人亚洲视频 | 久久99国产精一区二区三区 | 美女久久视频 | 精品日韩一区二区三区av动图 | 国产91在线观看 | 中文字幕亚洲一区二区三区 | eeuss国产一区二区三区四区 | 免费小视频在线观看 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 一区二区三区中文 | 亚洲国产成人精品女人久久久 | 黄色一级大片视频 | 亚洲精品久久久久久一区二区 | 亚洲免费一区二区 | 成人av电影在线 | 看毛片的网站 | 精品一级| 欧美视频一级 | 一级毛片在线视频 | 干干干操操操 |