摘要:
Block循环引用 什么情况下block会造成循环引用 ARC 情况下 block为了保证代码块内部对象不被提前释放,会对block中的对象进行强引用,就相当于持有了其中的对象,而如果此时block中的对象又持有了该block,就会造成循环引用。 常见误区 误区一.所有block都会造成循环引用 在 阅读全文
摘要:
什么时候需要对变量使用__block? __block可以用于解决block内部无法修改auto变量值的问题。__block不能修饰全局变量、静态变量(static)。 __block用来赋值场景(对象类型)(使用场景修改auto变量值) //赋值场景 NSMutableArray *__block 阅读全文
摘要:
iOS-block用什么修饰符来修饰?为什么用copy来修饰呢?用strong来修饰可以吗? 在ARC下 block 可以用copy 或者 strong来修饰。 为什么用copy来修饰? 因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到 阅读全文
摘要:
Block有三种类型:__NSGlobalBlock,__NSStackBlock,__NSMallocBlock 问题:Block有几种类型呢?这几种类型分别在什么情况下出现?我们思考一下,__NSStackBlock在访问外部变量时,会有什么问题? 我们在讲block的本质的时候已经知道了,bl 阅读全文
摘要:
上一篇我们讲到了Block是如何捕获基本数据类型的,今天我们研究一下block是如何捕获对象类型的数据. 我们用一个小问题开始本篇的主题:在ARC环境下,我们先创建一个Person类,再重写Person类的dealloc方法,然后看下面代码 当我们的代码走到断点的时候,Person被销毁了,这很容易 阅读全文
摘要:
Block如何捕获外部变量一:基本数据类型 共有三种:auto变量 、static变量、全局变量 这一篇,我们详细讲解Block捕获外部变量的机制.我们把block捕获外部基本数据类型变量的情况分为以下几种,见下图: 一:auto变量 auto变量:自动变量,离开作用域就会销毁,一般我们创建的局部变 阅读全文
摘要:
一: block的原理是怎样的?本质是什么? block本质上也是一个OC对象,因为它的内部也有个isa指针 block是封装了函数调用以及函数调用环境的OC对象 接下来我们将通过底层源码来论证上诉两点. 首先我们写一个简单的block,通过clang编译器编译成C++代码,查看一下block的底层 阅读全文
摘要:
一、最简单的block 1、最简单的block结构 ^{ NSLog(@"this is a block"); NSLog(@"this is a block"); NSLog(@"this is a block"); }; 2、block的调用 ^{ NSLog(@"this is a block 阅读全文
摘要:
nan or +inf报错 一、nan的意思是 not a number 不是数字 nan一般是因为在float类型经过函数运行后,出现了不为数字的值,主要常见原因有 除以0 就是你的除数为0 (10/0) 或者 除数或者被除数为null (这两种情况在你做除法的时候可能不会出现错误,但是当你设置c 阅读全文
摘要:
Objective-C 有两个神奇的方法:+load 和 +initialize,这两个方法在类被使用时会自动调用。但是两个方法的不同点会导致应用层面上性能的显著差异。 一、+ initialize 方法和+load 调用时机 先来看一个表 方法+(void)load+(void)initializ 阅读全文