一些关于Block, ARC, GCD的总结
基础解释不做。基础的东西链接如下:
===================分割线是不是这样用的====下面讲Block=======================================
该部份只是把不同语言中的类似的东西放一起讲了一下。如果不关心C++可以直接跳到下一个分割线以后。
Block其实很像C++中的函数对象(function object),都定义了一个可调用的对象。以下把一些类似的玩意放一起比较一下:
先上一个C++的Sort函数:
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
最后一个Compare就是一个可调用的比较函数(对象)。
现有一个C++ Vector:
int myints[] = {32,71,12,45,26,80,53,33};
std::vector<int> myvector (myints, myints+8);
1. 函数(方法)/函数指针:这个我们都很熟悉,也可以传递函数指针做为参数,返回值等等。
所以你可以先定义一个比较这函数,然后在排序的时候传递下面这个函数的指针:
bool myfunction (int i,int j) { return (i<j); } std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
2. C++函数对象:上面说了函数,但我们不能把函数做为参数这些传来传去,只能传函数指针,而函数指针不能保存值(或者说状态)。所以函数对象出现了,函数对象可以调用,与函数指针相比较他有两个方面的优点:首先如果被重载的调用操作符是inline函数则编译器能够执行内联编译,提供可能的性能好处;其次函数对象可以拥有任意数目的额外数据,用这些数据可以缓冲结果,也可以缓冲有助于当前操作的数据
你可以这样定义一个函数对象然后调用sort方法:
struct myclass {
// 这里你可以存任意的中间数据,或者状态
bool operator() (int i,int j) { return (i<j);}
} myobject; std::sort (myvector.begin(), myvector.end(), myobject); //(12 26 32 33 45 53 71 80)
3. Lambd表达式(Reference)。由于函数和函数对象都需要先定义后使用(难道还有先使用后定义的?
一些关于Block, ARC, GCD的总结的更多相关文章
- 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)
@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=Syn ...
- MRC BlOCK ARC
/*-------------------MRC环境中-------------------------*/ //使用局部变量:a到block块中,为了在block中能够使用这个变量,将 ...
- iOS下单例模式实现(一)(objective-c arc gcd)
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这里主要介绍下在arc下,利用gcd实现单例. 第一步:声明一个静态实例 static SoundTool *_instan ...
- 【ios开发】Block编程
1 什么是block iOS SDK 4.0开始,Apple引入了block这一特性.字面上说,block就是一个代码块,但是它的神奇之处在于在内联(inline)执行的时候(这和C++很像)还可以传 ...
- Block 进阶
转载自:http://www.cnblogs.com/xiaofeixiang/p/4666796.html 关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写 ...
- iOS多线程开发之离不开的GCD(上篇)
一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了⼀种新的方法来进⾏并发程序编写.从基本功能上讲,GCD有点像NSOperatio ...
- GCD使用汇总
本文目录 dispatch_queue_t.dispatch_block_t dispatch_sync.dispatch_async dispatch_set_target_queue.dispat ...
- iOS开发-Block回调
关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发 ...
- iOS底层原理总结 - 探寻block的本质(一)
面试题 block的原理是怎样的?本质是什么? __block的作用是什么?有什么使用注意点? block的属性修饰词为什么是copy?使用block有哪些使用注意? block在修改NSMu ...
随机推荐
- eclipse环境下tomcat远程调试方法
前提:Windows环境tomcat是以catalina.bat方式而非Windows服务形式启动(两者所使用的JAVA配置及JVM参数会有差异). 服务器段设置 方法1:修改CATALINA_OPT ...
- JS一般般的网页重构可以使用Node.js做些什么(转)
一.非计算机背景前端如何快速了解Node.js? 做前端的应该都听过Node.js,偏开发背景的童鞋应该都玩过. 对于一些没有计算机背景的,工作内容以静态页面呈现为主的前端,可能并未把玩过Node.j ...
- C/C++中static关键字详解-zz
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值. 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见.用法1:函数内部声明 ...
- Nginx - Windows下Nginx基本安装和配置
Nginx 是一个轻量级的高性能 Http WebServer,以事件驱动方式编写,因此相比 Apache 而言,Nginx 更加稳定.性能更好,而且配置简单,资源占用较低. 1. 安装 Nginx ...
- Spring配置数据库固定代码
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" > &l ...
- ASP.NET Cookie对象到底是毛啊?(简单小例子)
记得刚接触asp.net的时候,就被几个概念搞的头痛不已,比如Request,Response,Session和Cookie.然后还各种在搜索引擎搜,各种问同事的,但是结果就是自己还是很懵的节奏. 那 ...
- Mac OS X 10.9 编译C++11
Notice: How to compile C++ with C++ 11 support in Mac Terminal stackoverflow上面的问题 其实mac里面的不是g++而是cla ...
- Epic - Seed Number
Find the seed of a number. Eg : 1716 = 143*1*4*3 =1716 so 143 is the seed of 1716. find all possible ...
- Java正则表达式获取网页所有网址和链接文字
; pos1= urlContent.indexOf(strAreaBegin)+strAreaBegin.length(); pos2=urlContent.inde ...
- Python的数据处理学习(二)
本文参考Paul Barry所著的<Head First Python>一书,参考代码均可由http://python.itcarlow.ie/站点下载.本文若有任何谬误希望不吝赐教~ 二 ...