国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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

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

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

按照調(diào)用函數(shù)的方式調(diào)用塊對象變量就可以了: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)變量,這樣在程序啟動的時候代碼塊變量就初始化了,可以遞歸調(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ā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 海口市| 梅州市| 突泉县| 溧阳市| 宁远县| 阳朔县| 南汇区| 建宁县| 三穗县| 沧源| 黑龙江省| 遵化市| 玉环县| 夏邑县| 孝感市| 宝兴县| 达州市| 河池市| 余江县| 房产| 中卫市| 桂平市| 郓城县| 南投市| 高州市| 鄂伦春自治旗| 桦南县| 青神县| 涪陵区| 浮山县| 长葛市| 黄平县| 大同市| 五台县| 柳州市| 天台县| 彝良县| 慈溪市| 临清市| 阳西县| 武鸣县|