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

首頁 > 學院 > 開發設計 > 正文

iOS中Block介紹(一)基礎

2019-11-14 19:09:13
字體:
來源:轉載
供稿:網友

iOS中Block介紹(一)基礎

一、概述

Block是C級別的語法和運行時特性。Block比較類似C函數,但是Block比之C函數,其靈活性體現在棧內存、堆內存的引用,我們甚至可以將一個Block作為參數傳給其他的函數或者Block。

二、熱身

先看一個比較簡單的Block例子:

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

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

來,讓我們typedef一下

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

三、更詳細的例子

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

主動調用一下:

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

作為參數返回:

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

類的一個成員:

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

其他函數的參數:

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

甚至其他block的參數:

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

啊,全局變量!:

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

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

四,特殊的標記,__block

如果要在block內修改block外聲明的棧變量,那么一定要對該變量加__block標記:

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固原市| 山阳县| 济宁市| 大兴区| 红桥区| 静安区| 东光县| 盐山县| 沁阳市| 永和县| 沙洋县| 海林市| 北京市| 方正县| 淳安县| 宁陕县| 寻乌县| 体育| 紫金县| 峡江县| 金秀| 进贤县| 聂荣县| 沁源县| 莲花县| 庆元县| 新蔡县| 巴里| 泰来县| 屯留县| 迁西县| 剑阁县| 沿河| 乐都县| 彝良县| 丰城市| 海宁市| 四平市| 石狮市| 常宁市| 尼玛县|