1. 程式人生 > >對於Block的一些簡單運用(Block回撥傳值GitHubDemo)

對於Block的一些簡單運用(Block回撥傳值GitHubDemo)

參考文章

簡書

GitHub地址

前言

  • 第一篇參考文章已經將塊分析的非常清楚了,我這也只是拾人牙慧,挑些核心點的程式碼總結下,想知道詳細的原理,可以參閱第一篇文章
  • 第二篇參考文章講了傳值的幾種方式,我們關注的是Block傳值,這裡我也是基本在這篇文章的基礎上做的Demo,另外多些自己的見解在註釋裡

關於Block

  • 宣告:Block變數的宣告格式為: 返回值型別(^Block名字)(引數列表);
  • typrdef定義:typedef void(^SayHello)();//之後就等於說能用SayHello為型別名去定義一個無返回值與引數的塊
  • 使用下劃線來在塊中修改區域性變數:__block int global = 100; void(^myBlock)() = ^{ NSLog(@“global = %d”, global); }; global = 101; // 呼叫後控制檯輸出"global = 101"
  • 迴圈引用原因:如果物件內部有一個Block屬性,而在Block內部又訪問了該物件,那麼會造成迴圈引用
  • 解決辦法:弱引用Person *p = [[Person alloc] init]; __weak typeof§ weakP = p;

p.myBlock = ^{ NSLog(@"------%@", weakP); };

p.myBlock();