日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十讲:Obj-C Blocks 应用

發(fā)布時間:2023/12/10 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十讲:Obj-C Blocks 应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn):http://tigercat1977.blog.163.com/blog/static/2141561122012111295955891/

第十講:Obj-C Blocks 應(yīng)用?

2012-12-12 09:59:55|? 分類: Objective-C |? 標簽:objective-c? |字號 訂閱

主要內(nèi)容
????? Blocks 是什么
????? Blocks 和 C 語言函數(shù)指針區(qū)別
????? 如何調(diào)用 Blocks
????? 代理兩端如何通過 Blocks 通訊

什么是 Blocks
????? Blocks 是一個 C Level 的語法以及運行時的一個特性,和標準 C 中的函數(shù)(函數(shù)指針)類似,但是其運行需要編譯器和運行時支持,從 IOS 4.0 開始就很好的支持 Block。


Blicks typedef 定義
????? C語言函數(shù)指針 typedef
????? typedef int (*SumBlockT)(int a, int b);

????? Block typedef 定義
????? typedef int (^SumBlockT)(int a, int b);

__block 關(guān)鍵字
????? 一個Block 的內(nèi)部是可以引用自身作用域外的變量的,包括 static 變量,extern 變量或自由變量 ( 定義一個變量的時候,如果不加存儲修飾符,默認情況下就是自由變量 auto , auto 變量保存在 stack 中的, 除了 auto 之外還存在 register , static 等存儲修飾符 ), 對于自由變量,在 Block 中是只讀的。在引入 block 的同時,還引入了一種特殊的 __block 關(guān)鍵字變量存儲修飾符

Blocks 簡單用法舉例

// main.m

#import <Foundation/Foundation.h> // 定義 Blocks 的 typedef typedef int (^SumBlockT) (int a, int b); int main (int argc, const char * argv[]) { @autoreleasepool { NSLog(@"Hello, World!"); void (^myblocks) (void) = NULL; myblocks = ^(void){ NSLog(@"in blocks"); }; // 給 myblocks 賦值 NSLog(@"before myblocks"); myblocks(); // 執(zhí)行 myblocks; NSLog(@"after myblocks"); /* 輸出結(jié)果: Hello, World! before myblocks in blocks after myblocks */ int (^myblock2) (int a, int b) = ^(int a, int b){ int c = a + b; return c; }; NSLog(@"before block2"); int ret = myblock2(10,20); NSLog(@"after block2 ret %d", ret); /* 輸出結(jié)果: before block2 after block2 ret 30 */ __block int sum = 0; // 調(diào)用外部變量 需要使用 __block 存儲修飾符 int (^myblocks3) (int a, int b) = ^(int a, int b){ sum = a+b; return 3; }; myblocks3(20, 30); NSLog(@"sum is %d", sum); /* 輸出結(jié)果: sum is 50 */ // 前面定義 Blocks 的 typedef SumBlockT SumBlockT myblocks4 = ^(int a, int b){ NSLog(@"c is %d", a+b); return 0; }; myblocks4(50, 20); /* 輸出結(jié)果: c is 70 */ } return 0; }


Blocks 案例


轉(zhuǎn)載于:https://www.cnblogs.com/jackljf/archive/2013/03/07/3589247.html

總結(jié)

以上是生活随笔為你收集整理的第十讲:Obj-C Blocks 应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。