摘要:的生命周期特别注意堆会持有对象,这样就导致,如果堆不释放的话,其持有的对象也不会释放,这样就会导致循环引用或者延迟释放,所以一般的做法是或宏
typedef void (^Callback)(id result); - (void)viewDidLoad { [self callbackDosomething:^(id result) { NSLog(@"%@",result); }]; } - (void)callbackDosomething:(Callback)callback{ callback = [self callbackReDosomething:callback]; } - (Callback)callbackReDosomething:(Callback)callback{ if (callback) { callback(@"dosomething"); } return callback; } 此处的callback就是用来传递的,在另一个方法里面才callback回调
block是OC对闭包实现的一个对象,为什么说block是对象了,因为在block的数据结构中存在isa指针
1、block分为三种:NSConcreteGlobalBlock、NSConcreteStackBlock、NSConcreteMallocBlock。
第一种block是全局block,如果一个block没有引入外部变量,那么这个block就是全局block,全局block在编译时期就已经确定大小了,如同宏一样;
第二种block是栈block,当引入了外部变量时,这种block就是栈block了,NSConcreteStackBlock内部会有一个结构体__main_block_impl_0,这个结构体会保存外部变量,使其体积变大。而这就导致了NSConcreteStackBlock并不像宏一样,而是一个动态的对象。而它由于没有被持有,所以在它的内部,它也不会持有其外部引用的对象。(注意,栈block是不会持有外部变量的)
第三种block是堆block,堆block就是一个block被copy到堆上,堆block会持有外部引用对象,所以会导致可能的对象延迟释放,或者循环引用的问题。(在MRC下,局部变量如果没有用_block,在block中会对其进行copy操作,而用了_block则只会引用其地址,这也就是为什么改变局部变量需要用_block修饰了)
注意:在MRC和ARC下block的区别
将block作为实例的属性变量时,MRC下需要手动copy到堆中,也就是栈block–>堆block(如果不copy就是栈block,栈block不会持有对象),而在ARC中属性赋值默认是strong,到了block自然就变成了copy,所以在ARC下默认是堆block。
block 的生命周期:
(特别注意:堆block会持有对象,这样就导致,如果堆block不释放的话,其持有的对象也不会释放,这样就会导致循环引用或者延迟释放,所以一般的做法是_weak(ARC)或_block(MRC))
宏:
·#define weak(obj) __weak typeof(obj) weak##obj = obj
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/16236.html
摘要:父容器设置优点弹性布局可以去除多余间隙,而且可以轻松的实现垂直居中,水平居中等效果。缺点过低版本的浏览器不支持该属性。 什么是inline-block之间的多余间隙 考虑以下代码: One Two Three nav a { display: inline-block; //或者inline; padding: 5px; background: red; }...
摘要:上例中,左边盒子的基线为其底边缘,右边盒子的基线为的基线将右边盒子的行高设置为,即这个的高度为,位置处于中间。 vertical-align的值 线类:baseline(默认), top, bottom, middle 文字类:text-top, text-bottom 上标下标类:sub, super 数值:1px, 1em - 在baseline对齐的基础上上下偏移一定数值 百分...
摘要:破坏文档流这是最本质的特性,因此设计的初衷就是破坏文档流。但是也有一种情况是,浮动元素前后并没有内联元素,因此也就不存在行框盒子,这时候就是浮动锚点在起作用。 前言 在css中,是存在流的概念的。在正常情况下,页面总是从左到右,从上到下布局,这种被称为正常的流。但是有很多情况,正常流是没办法实现的,因此我们需要一些手段来破坏流,从而实现一些特殊的布局,而本节的主角float就具备破坏流...
阅读 2359·2021-11-25 09:43
阅读 1616·2021-09-22 15:26
阅读 1521·2021-09-10 10:50
阅读 3131·2019-08-30 15:56
阅读 1505·2019-08-30 15:55
阅读 1670·2019-08-30 15:54
阅读 667·2019-08-30 15:52
阅读 2973·2019-08-29 16:23