block 的细节和本质

案例1:

  普通的局部变量,block内部只会引用它初始的值(block定义那一刻),不能跟踪它的改变

    

  输出:1

案例2:

  block内部能够一直引用被__block修饰的变量

    

  输出:2

案例3:

  block内部能够一直引用被static修饰的变量(初始化的时候就一直存放在内存;所以block能够动态访问)

    

  输出:2

案例4:

  block内部能够一直引用全局变量

    

  输出:2

如果想要查看由OC转成C的代码,可以cd到具体工程路径, 然后输入:

  clang -rewrite-objc main.m

然后open ./

时间: 2024-10-07 16:48:34

block 的细节和本质的相关文章

新浪微博客户端(34)-block的细节与本质

main.m #import <Foundation/Foundation.h> void test4(); int main(int argc, const char * argv[]) { @autoreleasepool { test4(); } return 0; } // 普通的局部变量,block只会引用它初始的值(block定义那一刻),不能跟踪变量的改变 void test1() { int i = 10; void (^next)() = ^{ printf("当前

ios影视项目解析 主要为讲block的细节 如果了解了 block的定义等 但是对运用不是很熟悉可以参考本文章

源于github上的影视项目解析 此项目在4app  和  github上都可以下载 项目截图: 此处为程序刚运行界面 程序应有一个discover控制器 找到discover控制器,然后可以根据项目的流程熟悉此项目的原理,从而学习到他们的架构思想 1 - (void)setupTableView 2 { 3 if (!_refreshControl) 4 { 5 _refreshControl = [[UIRefreshControl alloc] initWithFrame:CGRectMa

iOS中Block使用探索

Block介绍 Block在ios 4.0之后加入,并大量使用在新的ios api中.block是一个匿名的代码块,可以作为传递给其他对象的参数,并得到返回值.从本质上讲,block同其他普通的变量类似,只是其储存的数据是一个函数体.Block不只是针对Objective-C的专利,而是一种可以应用于C.C++和OBjective-C的语言层面的新特性.通过使用block,开发者可以将一段代码段像某一个数值一样当做参数传递给函数.同时,blocks也是Objective-C的一种对象,可以像其他

iOS block 的底层实现

其实swift 的闭包跟 OC的block 是一样一样的,学会了block,你swift里边的闭包就会无师自通. 参考:http://www.jianshu.com/p/e23078c11518 http://www.360doc.com/content/15/0901/11/10504424_496203197.shtml 先来简单介绍一下BlockBlock是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,Block可以在任何时候执行. Block和函数的相似

C/C++语言的本质(Directly)

记得大三实习的时候在一位喜欢做破解的哥们的影响下了解反汇编调试这么一回事儿,于是实践后 恍然悟到:(1)学汇编不为写汇编,而为透析c/c++诸多细节的本质(2)大神的境界应该是没写一句 c/c++语言,其相应汇编代码便了然于心. 题外话:本文总是把c语言和c++语言写在一起,是因为笔者喜欢,笔者认为如果说汇编语言是机器 语言的第一重映射,那么c语言就是汇编语言的第一重映射.c++是c语言的第1.5重映射.因此要精通 c语言,必然要熟悉汇编,要精通c++必然要精通c语言. 列举下我通过汇编透析到的

block和delegate的区别

代理  可读性高  大部分可以属性 block   写的代码少 一般作为参数通知   占用资源 无论是block还是delegate模式本质上都是回调,使用block,其优点是回调的block代码块直接就放在了block赋值的地方,使代码更为紧凑,缺点是block内使用到当前类的实例变量的时候,需要注意循环引用的问题,即需要使用__block(MRC下)或者__weak(ARC下)定义一个弱引用的self出来,block里面使用弱引用的self去操作属性或调用方法.delegate模式不用像bl

block底层实现原理

1.关于block的循环引用: block属性,一般用copy修饰: 1.1.如果没有对block进行copy操作,block就存储于栈空间 1.2.如果对block进行copy操作,block就存储于堆空间---强引用 1.3.如果block存储于栈空间,不会对block内部所用到的对象产生强引用 1.4.如果block存储于堆空间,就会对block内部所用到的对象产生强引用 注意1:由于使用了copy修饰,如果block中调用了block属性的对象,就会造成循环引用 为了避免循环引用,需要对

超大地形的处理 (Terrain Visualization)【转自知乎】

转自顾露 [开放世界游戏中的大地图背后有哪些实现技术?] 链接:http://gulu-dev.com/post/2014-11-16-open-world ### 4. 超大地形的处理 (Terrain Visualization) 终于说到对超大地形的处理了.可以说从上世纪九十年代起,超大地形的可视化,一直是3D游戏领域热门的话题.今天我们就借着这个机会,把相关的算法和实现理一理吧. 考虑到篇幅太长的话,俺的手指头招架不住,再一个不少对这个话题感兴趣的同学可能压根就不是程序员,一些实现细节可

Java多线程总结(一)多线程基础

本文转载地址:             http://www.cnblogs.com/zrtqsk/p/3776328.html 多线程是Java学习的非常重要的方面,是每个Java程序员必须掌握的基本技能.本文只是多线程细节.本质的总结,并无代码例子入门,不适合初学者理解.初学者学习多线程,建议一边看书.看博文,以便写代码尝试. 一.进程 进程是操作系统结构的基础:是一次程序的执行:是一个程序及其数据在处理机上顺序执行时所发生的活动.操作系统中,几乎所有运行中的任务对应一条进程(Process