国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 西充县| 太湖县| 桓仁| 岫岩| 焉耆| 富源县| 鸡东县| 雅安市| 南城县| 德清县| 新源县| 武安市| 北京市| 卢龙县| 天水市| 宜章县| 准格尔旗| 沈丘县| 巨鹿县| 东台市| 克拉玛依市| 自治县| 洞口县| 吴江市| 马鞍山市| 湘潭县| 体育| 紫金县| 汾西县| 乐山市| 博湖县| 岑溪市| 临洮县| 土默特左旗| 武功县| 天水市| 壶关县| 桂林市| 邢台县| 唐海县| 南平市|