转: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。

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 案例

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

第十讲:Obj-C Blocks 应用相关推荐

  1. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  2. 《突破C#编程实例五十讲》源文件下载(2)

    上接<<突破C#编程实例五十讲>源文件下载(1)> 有兴趣的朋友下载看看吧,一共有9个压缩包分3篇文章,下载要注意哦,不然解压要出错哦! 转载于:https://blog.51 ...

  3. 趣谈网络协议笔记-二(第十讲)

    趣谈网络协议笔记-二(第十讲) UDP协议:因性善而简单,难免碰到"城会玩" 自勉 如果手上没有剑,我就无法保护你.如果我一直握着剑,我就无法抱紧你.--<Bleach> ...

  4. JSP快速入门教程——全十讲

    第一讲(参考<Java Web程序设计基础教程>第1章) 1 JSP 和 Java的关系 一般Java指的标注版 Java SE    另外两个版本:Java EE 和 Java ME J ...

  5. 逆向知识第十讲,循环在汇编中的表现形式,以及代码还原

    逆向知识第十讲,循环在汇编中的表现形式,以及代码还原 一丶do While在汇编中的表现形式 1.1高级代码: #include "stdafx.h"int main(int ar ...

  6. 实用防火与防爆技术培训---第十讲 可燃气体的燃爆特性

    第十讲  可燃气体的燃爆特性 一.燃烧方式 气体的燃烧与液体和固体的燃烧不同,它不需要经过蒸发.熔化等过程,气体在正常状态下就可具有燃烧条件,所以比液体和固体都容易燃烧.有扩散燃烧和动力燃烧两种形式. ...

  7. 动手学ocr·十讲--学习笔记一

    动手学ocr·十讲 技术导论 课程链接请点击这里 1.1 OCR技术背景: OCR是什么 OCR(Optical Character Recognition,光学字符识别)是计算机视觉重要方向之一.传 ...

  8. 《可转债入门十讲》笔记

    可转债入门十讲 01.可转债基础知识(上) 定义 可转换公司债券,是指其持有者可以在一定时期内按一定比例或价格,将之转换成一定数量股票的公司债券. 预期收益 历史最高价:3618.188,历史最低价6 ...

  9. 初识二维码 第二十讲 二维码解码程序的组件之一 摄像头拍照功能

    初识二维码 第二十讲    二维码解码程序的组件之一 摄像头拍照功能 解码程序的第一个环节是通过摄像头这个硬件,得到二维码的图片. 对摄像头的工作原理来说,简单的描述如下:1是从摄像头得到模拟信号, ...

最新文章

  1. idea上传项目到码云_mall前端项目的安装与部署
  2. Python 技术篇-python生成html源码功能实现演示,html代码自动生成技巧,列表生成式的灵活应用
  3. 跟着 Github 学习 Restful HTTP API 的优雅设计
  4. r怎么保存html文件,leaflet - 为什么在已保存的html文件中缺少传单地图上的杂项,但在Rstudio浏览器中可以正常打印呢? - 堆栈内存溢出...
  5. Python学习笔记--函数
  6. 1815. 计算两点间的距离
  7. vs文件上传失败--超过最大字符限制
  8. python渐变色代码_如何在Python中创建颜色渐变?
  9. 【Java】Object转换为String的三种策略总结
  10. 【SQL】含有NULL值的排序
  11. top 并grep 特定信息打印至txt
  12. 面试官:为什么要用 Spring?它到底解决了什么问题?
  13. 分簇路由算法 LEACH算法
  14. 图灵社区python kindle_推送mobi至Kindle流程说明(简要操作)
  15. .wav音乐文件转换为.fft.npy频谱格式文件
  16. html圆形头像简易实现
  17. vim 常用配置整理
  18. 对于踏入社会的我们来说,学历到底有多重要?学历的用途介绍
  19. I/O复用 —— select
  20. Spring系列学习之Spring Cloud Contract测试消息传递

热门文章

  1. javascript学习系列(19):数组中的Array.from方法
  2. 前端学习(3169):react-hello-react之对props进行限制
  3. [vue] 你了解什么是高阶组件吗?可否举个例子说明下?
  4. [js] 写一个方法,当给定数字位数不足8位时,则在左边补充0以补足8位数的方法
  5. 前端学习(2783):封装myrequest并绑定到全局
  6. 前端学习(2577):Nuxt解决了什么问题
  7. 前端学习(2244):计算器显示问题
  8. 前端学习(1759):前端调试值之调试安卓设备的方法
  9. 前端学习(1109):函数的调用
  10. spring mvc学习(51):jsonp