麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Objective-C語(yǔ)法之代碼塊(block)的使用

2019-11-09 18:50:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
代碼塊本質(zhì)上是和其他變量類似。不同的是,代碼塊存儲(chǔ)的數(shù)據(jù)是一個(gè)函數(shù)體。使用代碼塊是,你可以像調(diào)用其他標(biāo)準(zhǔn)函數(shù)一樣,傳入?yún)?shù)數(shù),并得到返回值。

脫字符(^)是塊的語(yǔ)法標(biāo)記。按照我們熟悉的參數(shù)語(yǔ)法規(guī)約所定義的返回值以及塊的主體(也就是可以執(zhí)行的代碼)。下圖是如何把塊變量賦值給一個(gè)變量的語(yǔ)法講解:

按照調(diào)用函數(shù)的方式調(diào)用塊對(duì)象變量就可以了:int result = myBlock(4); // result是 28

1、參數(shù)是NSString*的代碼塊

[cpp] view plaincopyvoid (^PRintBlock)(NSString *x);  printBlock = ^(NSString* str)  {      NSLog(@"print:%@", str);  };  printBlock(@"hello world!");  運(yùn)行結(jié)果是:print:hello world!

2、代碼用在字符串?dāng)?shù)組排序

[cpp] view plaincopyNSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];  NSComparator sortBlock = ^(id string1, id string2)  {      return [string1 compare:string2];  };  NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];  NSLog(@"sortArray:%@", sortArray);  運(yùn)行結(jié)果:sortArray:(

    "abc 05",

    "abc 1",

    "abc 12",

    "abc 13",

    "abc 21"

)

3、代碼塊的遞歸調(diào)用

代碼塊想要遞歸調(diào)用,代碼塊變量必須是全局變量或者是靜態(tài)變量,這樣在程序啟動(dòng)的時(shí)候代碼塊變量就初始化了,可以遞歸調(diào)用

[cpp] view plaincopystatic void (^ const blocks)(int) = ^(int i)  {      if (i > 0) {          NSLog(@"num:%d", i);          blocks(i - 1);      }  };  blocks(3);  運(yùn)行打印結(jié)果:

num:3

num:2

num:1

 4、在代碼塊中使用局部變量和全局變量

在代碼塊中可以使用和改變?nèi)肿兞?p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">

[cpp] view plaincopyint global = 1000;  int main(int argc, const char * argv[])  {      @autoreleasepool {          void(^block)(void) = ^(void)          {              global++;              NSLog(@"global:%d", global);          };          block();          NSLog(@"global:%d", global);      }      return 0;  }  

運(yùn)行打印結(jié)果:

global:1001

global:1001

而局部變量可以使用,但是不能改變。

[cpp] view plaincopyint local = 500;  void(^block)(void) = ^(void)  {        local++;      NSLog(@"local:%d", local);  };  block();  NSLog(@"local:%d", local);  在代碼塊中改變局部變量編譯不通過。怎么在代碼塊中改變局部變量呢?在局部變量前面加上關(guān)鍵字:__block

[cpp] view plaincopy__block int local = 500;  void(^block)(void) = ^(void)  {      local++;      NSLog(@"local:%d", local);  };  block();  NSLog(@"local:%d", local);  運(yùn)行結(jié)果:local:501

                    local:501

轉(zhuǎn)載:http://blog.csdn.net/totogo2010/


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久国久产久精永久网页 | 在线中文字幕不卡 | 久久久久久久久久久国产精品 | 欧美亚洲国产成人综合在线 | 中文字幕在线亚洲 | 把娇妻调教成暴露狂 | 欧美特黄a | 久久久久久久.comav | 黄污网址| 国产精品久久久久久久不卡 | 久久久久夜色精品国产老牛91 | 免费久久久久 | 成人免费在线播放 | 国产自在线| 欧美a级在线免费观看 | 精品久久久久久久久久中出 | 美国av片在线观看 | 国产精品999在线观看 | 九色激情网| 毛片一级片 | 欧美成人性生活片 | 精品国产一区二区在线观看 | 天天黄色片 | 欧洲成人av | 久久久久免费精品国产小说色大师 | 青草视频在线观看视频 | 欧美一区二区精品夜夜嗨 | 91短视频网页版 | 精品在线免费播放 | 成人一级黄色片 | 羞羞色院91精品网站 | 久久精品一区二区三 | 国产成人精品免费视频大全最热 | 久草在线免费看 | 精品一区二区6 | 一区二区三区欧美日韩 | 有色视频在线观看 | www.99av| 精国品产一区二区三区有限公司 | 日本精品视频一区二区三区四区 | 99国产精品白浆在线观看免费 |