标签:"block"

block介绍(五)ARC下的内存管理附注

一、自动调用Block_copy()在ARC下,当我们试图在栈上创建一个block时,一个Block_copy调用会被立即执行。为了验证这样的结论,让我们声明一个非常简单的block,这个block的内容仅仅是打印一句log,不引用任何外部变量或者所在栈域变量。我们已经设置了_Block_copy这个符号断点,Block_copy方法只是一个宏函数,它真正调用的是_Block_copy// Type correct macros

#define Block_copy(...) ((__typeof(__VA_ARGS__))_Block_copy((const void

block介绍(四)揭开神秘面纱(下)

终于有空开始这系列最后一篇的编写。
这一篇,我们将看到block的内存管理的内部实现,通过剖析runtime库源码,我们可以更深刻的理解block的内存运作体系。

看此篇时,请大家同时打开两个网址(或者下载它们到本地然后打开):
http://llvm.org/svn/llvm-project/compiler-rt/trunk/BlocksRuntime/runtime.c
http://llvm.org/svn/llvm-project/compiler-rt/trunk/BlocksRuntime/Block_private.h

Block介绍(二)内存管理与其他特性


我们在前一章介绍了block的用法,而正确使用block必须要求正确理解block的内存管理问题。
这一章,我们只陈述结果而不追寻原因,我们将在下一章深入其原因。

一、block放在哪里
我们针对不同情况来讨论block的存放位置:
1.栈和堆

Block介绍(一)基础

一、概述
Block是C级别的语法和运行时特性。Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存、堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block。
 
二、热身
先看一个比较简单的Block例子:
int multiplier = 7;