typeof与block

来源:互联网 发布:mac游戏 编辑:程序博客网 时间:2024/05/16 18:43

Block两点注意:

1.block 的循环引用(retain cycle)

2.去除block产生的告警时,需注意问题。

非ARC:在Block中访问自身的属性,会retain自身造成内存泄漏,解决这种循环引用问题。就是在变量前面加个__block。

ARC:不是简单的在变量前面加个__weak,这时还会告警,说这是一个WEAK变量,就马上会被release。因此还未到执行block中的内容就已经被释放,解决这种循环引用问题 方法:__weak typeof(CustomCell) *weakCell = cell;  


block对于其变量都会形成strong reference,对于self也会形成strong reference ,而如果self本身对block也是 strong reference 的话,就会形成 strong reference 循环,造成内存泄露,为了防止这种情况发生,在block外部应该创建一个week(__block) reference。

所以在block内如果有self的话,一般都会在block外面加一句_block typeof(self)bself = self;

__block typeof(self) bself = self;  
  
[self methodThatTakesABlock:^ {  
  
    [bself doSomething];  


typeof运算符介绍: 
typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。 
它返回值是一个字符串,该字符串说明运算数的类型。 
你知道下面typeof运算的结果吗? 
typeof(1); 
typeof(NaN); 
typeof(Number.MIN_VALUE); 
typeof(Infinity); 
typeof("123"); 
typeof(true); 
typeof(window); 
typeof(document); 
typeof(null); 
typeof(eval); 
typeof(Date); 
typeof(sss); 
typeof(undefined); 
看看你会几个? 

如果看了以后,不是很明白的话,请看下面(明白的人就不用往下看了): 
typeof是一个一元运算符,它返回的结果始终是一个字符串,对不同的操作数,它返回不同的结果。 
具体的规则如下: 
一、对于数字类型的操作数而言, typeof 返回的值是 number。比如说:typeof(1),返回的值就是number。 
上面是举的常规数字,对于非常规的数字类型而言,其结果返回的也是number。比如typeof(NaN),NaN在 
JavaScript中代表的是特殊非数字值,虽然它本身是一个数字类型。 
在JavaScript中,特殊的数字类型还有几种: 
Infinity 表示无穷大特殊值 
NaN            特殊的非数字值 
Number.MAX_VALUE     可表示的最大数字 
Number.MIN_VALUE     可表示的最小数字(与零最接近) 
Number.NaN        特殊的非数字值 
Number.POSITIVE_INFINITY 表示正无穷大的特殊值 
Number.NEGATIVE_INFINITY 表示负无穷大的特殊值 
以上特殊类型,在用typeof进行运算进,其结果都将是number。 
二、对于字符串类型, typeof 返回的值是 string。比如typeof("123")返回的值是string。 
三、对于布尔类型, typeof 返回的值是 boolean 。比如typeof(true)返回的值是boolean。 
四、对于对象、数组、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object。 
五、对于函数类型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。 
六、如果运算数是没有定义的(比如说不存在的变量、函数或者undefined),将返回undefined。比如:typeof(sss)、typeof(undefined)都返回undefined。

0 0
原创粉丝点击