Block的简单使用

Block的本质是结构体指针,苹果官方文档给出的定义:

基本的定义方法:

 

1.__block 的使用

想在block内部对其外部的局部变量进行修改:

编译报错,因此需要在要修改的变量前添加 __block 关键字。

__block 的意思是将 _block 修饰的变量从栈中 copy到堆中去。

关于堆区与栈区的区别:栈区主要存放局部变量,定义的参数等,在函数结束,系统会自动回收其内存空间,而堆区一般用程序员自行分配释放,若程序员不释放,程序结束时,由系统回收。总的来说,使用栈区更为快捷,而使用堆区更为灵活。

 

2.Block中的循环引用

 Retain cycle :循环引用指两个对象相互强引用了对方,即retain了对方,从而导致谁也释放不了谁的内存泄露问题。

使用block时,如下会出现循环引用:

此时self(当前界面)强引用了 此block ,而在block中又将self拷贝到了堆中,即retain了一次self,就会双向强引用,两个对象都不会被释放,从而引起循环引用。

可以使用__weak来解决:

 

使用block可以实现界面传值,使用起来非常方便,作用等同于代理。 

posted @ 2016-10-17 17:09  似成相识的梦  阅读(162)  评论(0)    收藏  举报