第十讲:Obj-C Blocks 应用

转:http://tigercat1977.blog.163.com/blog/static/2141561122012111295955891/

第十讲:Obj-C Blocks 应用 

2012-12-12 09:59:55|  分类: Objective-C |  标签:objective-c  |字号 订阅

主要内容
      Blocks 是什么
      Blocks 和 C 语言函数指针区别
      如何调用 Blocks
      代理两端如何通过 Blocks 通讯

什么是 Blocks
      Blocks 是一个 C Level 的语法以及运行时的一个特性,和标准 C 中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从 IOS 4.0 开始就很好的支持 Block。
第十讲:Obj-C Blocks 应用 - tigercat1977 - tiger notes

Blicks typedef 定义
      C语言函数指针 typedef
      typedef int (*SumBlockT)(int a, int b);

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

__block 关键字
      一个Block 的内部是可以引用自身作用域外的变量的,包括 static 变量,extern 变量或自由变量 ( 定义一个变量的时候,如果不加存储修饰符,默认情况下就是自由变量 auto , auto 变量保存在 stack 中的, 除了 auto 之外还存在 register , static 等存储修饰符 ), 对于自由变量,在 Block 中是只读的。在引入 block 的同时,还引入了一种特殊的 __block 关键字变量存储修饰符

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(); // 执行 myblocks; NSLog(@"after myblocks"); /* 输出结果: 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); /* 输出结果: before block2 after block2 ret 30 */ __block int sum = 0; // 调用外部变量 需要使用 __block 存储修饰符 int (^myblocks3) (int a, int b) = ^(int a, int b){ sum = a+b; return 3; }; myblocks3(20, 30); NSLog(@"sum is %d", sum); /* 输出结果: sum is 50 */ // 前面定义 Blocks 的 typedef SumBlockT SumBlockT myblocks4 = ^(int a, int b){ NSLog(@"c is %d", a+b); return 0; }; myblocks4(50, 20); /* 输出结果: c is 70 */ } return 0; }


Blocks 案例
第十讲:Obj-C Blocks 应用 - tigercat1977 - tiger notes


转载于:https://www.cnblogs.com/jackljf/archive/2013/03/07/3589247.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机成绩表及格率怎么算,卫生资格人机对话如何考试如何评分?成绩如何核算?...

原标题&#xff1a;卫生资格人机对话如何考试如何评分&#xff1f;成绩如何核算&#xff1f;世事悠悠浑未了&#xff0c;年光冉冉今如许。今天距离考试只有30天啦&#xff01;大家都做好冲刺准备了吗&#xff1f;眼看离考试越来越近&#xff0c;今儿就跟大家说说人机考试的那些…

查询应用服务器fc端口wwn号,FAQ-如何查询应用服务器HBA卡的WWN号

解决方案Windows操作系统1、在Windows应用服务器上安装软件“scli-1[1].06.16-29.windows.msi”。2、在桌面上单击该软件的快捷方式。系统自动启动该软件&#xff0c;并出现如图1所示的界面。图1 操作选择界面3、在“Enter Selection:”后输入4并按“Enter”键。系统出现如图2所…

服务器imm口加载硬盘,ibm x3250 M4如何进IMM(远程管理口)

服务器型号&#xff1a;IBM X3250M4能ping通192.168.70.125但是访问 http://192.168.70.125 浏览器打不开网页。故障原因&#xff1a;IBM 3100M4和3250M4服务器标配的IMM是Basic(基础)版本的&#xff0c;浏览器无法通过web界面进行访问&#xff0c;如果需要web访问功能需要升级…

文档服务器设置密码,文档服务器设置密码

文档服务器设置密码 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。当云服务器密码即将过期、密码泄露或首次登录时(首次登录云服务…

chmod修改权限

1.创建一个新文件 touch file_name 注意&#xff1a;linux没有文件拓展名的概念&#xff0c;创建时是什么样的就是什么样的&#xff01;&#xff01;&#xff01; 2.查看权限 d:代表是一个目录 -&#xff1a;普通文件 r&#xff1a;读权限 w&#xff1a;写/修改的权限 x…

初始化--代码

public class A{public static int X; //1static A(){X B.Y 1; //2 找B.Y时就会执行YA.X1;}}public class B{public static int Y A.X 1;static B(){}} 调用A.X B.Y,调用时&#xff0c;几乎同时执行类内部的静态数据成员&#xff0c;结果X0,Y1,再调用静态构造函数&a…

Oracle buffer状态深入剖析

这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjA4NDM2.html所做学习笔记1. 什么是buffer之前提过很多次啦&#xff0c; 其实在oracle数据文件中最小的单位就是block, 而用户读取block数据时&#xff0c;oracle就会将block的数据放入缓存&#x…