對於Block的一些簡單運用(Block回撥傳值GitHubDemo)
阿新 • • 發佈:2018-12-15
參考文章
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();