第十讲: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,一经查实,立即删除!

相关文章

计算机右键菜单太多,电脑点击右键太多选项怎么办

1. 鼠标右键新建里有太多选项,怎么删除没用的选项清除方法&#xff1a;1&#xff0c;以下代码粘贴进TXT文本文档&#xff1b;2&#xff0c;文档另存后&#xff0c;命名为“.cmd”后缀&#xff0c;保存到桌面&#xff1b;3&#xff0c;双击该文档&#xff0c;即可自动清理。清除…

javascript递归函数问题

最近在看《Professional Javascript For Web Developers 3rd Edition》&#xff0c;看到关于递归函数调用的问题&#xff0c;在此记录备忘&#xff1a; 先定义一个递归函数&#xff0c;求正整数N的阶乘&#xff1a; function factorial(num){if(num<1)return 1;return num*f…

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

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

坚持的力量 第一篇

第一篇 风筝 在阳光明媚的春天&#xff0c;听着孙燕姿的《风筝》&#xff0c;我陶醉了&#xff0c;我用我的笔端刷新着我的思维&#xff0c;我的成长。 “天空的风筝哪去了&#xff0c;你知不知道”&#xff0c;“穿越云端&#xff0c;飞的更高&#xff0c;把梦想找到”。…

OD 学校的位置

/*** 题目描述&#xff1a;* 为了解决新学期学生暴涨的问题&#xff0c;小乐村要建所新学校。考虑到学生上学安全问题&#xff0c;需要所有学生家到学校距离最短。* 假设学校和所有的学生家&#xff0c;走在一条直线上。 请问&#xff0c;学校要建在什么位置&#xff0c;能使得…

商务计算机的购置方案,电子采购方案的实施.ppt

《电子采购方案的实施.ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《电子采购方案的实施.ppt(10页珍藏版)》请在人人文库网上搜索。1、第三节 电子采购方案的实施,一、实施电子采购的技术支持,二、实施电子采购的步骤,一、实施电子采购的技术支持,数据库技术&a…

HDOJ1014 Uniform Generator

Problem : 1014 ( Uniform Generator ) Judge Status : AcceptedRunId : 7742145 Language : C Author : qq1203456195Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta 依题意可知&#xff0c;只要两个数的最大公约数为1就ok了~ 1 #include …

查询应用服务器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所…

【转】Android加密算法:AES、Base64加密算法

http://blog.csdn.net/yuxlong2010/article/details/7892146 有些场合下&#xff0c;例如在要实现自动登录时本地存储用户的帐号和密码&#xff0c;不能用明码来标识。这时候就首先需要对这些关键信息进行加密。对信息进行加密有许多种,下面将详细介绍BASE 64编码的实现&#x…

服务器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访问功能需要升级…

Cookie 的规范介绍

目前有以下几种 Cookie 规范&#xff1a; Netscape cookie 草案&#xff1a;是最早的 cookie 规范&#xff0c;基于 rfc2109。尽管这个规范与 rc2109 有较大的差别&#xff0c;但是很多服务器都与之兼容。rfc2109&#xff0c; 是 w3c 发布的第一个官方 cookie 规范。理论上讲&a…

unix修改服务器时间格式,处理unix中的日期格式

以下sql代码将插入文本文件中&#xff0c;作为input.txt的输入&#xff1a;insert into t_agg_sgsn_gprs_usageselectserved_imsi as imsi,served_msisdn as msisdn,NVL(cell_identity,-1) as cell_id,NVL(trim(to_char(location_area_code,99999999)),UNKNOWN),substr(served_…

借口很多呀嘛接口也很多呀嘛态也很多

关于多接口&#xff0c;我还是要总结一下&#xff0c;学习了这么多不总结不是浪费了么。哎 多接口可以实现多态性&#xff01; 首先&#xff0c;来我们先来定义一个接口 Public Interface IFullname Function GetFullName(ByVal a As String, ByVal b As String) As Stri…

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

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

服务器mysql如何添加数据库文件,如何在使用MySQL作为嵌入式服务器时创建数据库文件...

我试图构建一个应用程序&#xff0c;该应用程序将使用MySQL嵌入式数据库(目前在OS X上&#xff0c;但最终在OS X和Windows上)以及I我以this example为起点。我已经成功地能够建立它&#xff0c;使用cmake这个CMakeLists文件&#xff1a;如何在使用MySQL作为嵌入式服务器时创建数…