iOS 8:__weak与__block

关键字:ARC __weak  __block

1、__weak不增加引用,__block增加引用。举例:对象内有一个强引用的block成员变量,此成员变量又强引用该对象,若对象不经过__weak处理,则二者循环引用。

2、若block需要改变局部变量的值,则局部变量需要用__block修饰。

参考:

http://www.cocoachina.com/bbs/3g/read.php?tid=258850

时间: 2024-10-18 23:02:10

iOS 8:__weak与__block的相关文章

__weak 和 __block 区别

Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock)(int) = ^(int num) { multiplier ++;//这样就可以了 return num * multiplier; }; 2.如果局部变量是数组或者指针的时候只复制这个指针,两个指针指向同一个地址,block只修改指针上的内容.如: NSMutableArray *mArray = [NS

iOS __weak 和 __block 的使用探讨

在基本的开发中遇到 需要弱引用时候 我一般 用 weak  预防 死锁的时候 我会用 block 的确没出过大错  但是这样处理 的确有点囫囵  现在我想好好理解一下这两个修饰符 "block中用到的外部变量最好使用 __weak 修饰,避免内存泄露; block容易引起引用循环的根本原因是: 1,对于(block内部用到的)外部变量,对其执行retain 的时机 与该block的执行时机是不同步的,在block声明的时候就对外部变量进行了retain,而block何时执行甚至是否执行都是不可预

__weak与__block修饰符区别

API Reference对__block变量修饰符的解释,大概意思: 1.__block对象在block中是可以被修改.重新赋值的. 2.__block对象在block中不会被block强引用一次,从而不会出现循环引用问题. API Reference对__weak变量修饰符的解释,大概意思: 使用了__weak修饰符的对象,作用等同于定义为weak的property.自然不会导致循环引用问题,因为苹果文档已经说的很清楚,当原对象没有任何强引用的时候,弱引用指针也会被设置为nil. 因此,__

What the difference between __weak and __block reference?

近日遇到一个非常细的知识点,关于block的循环引用问题.相比非常多人都遇到了.也能顺利攻克了,至于block方面的技术文章.那就很多其它了.这里不再赘述,可是有这样一个问题: 使用场景: __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; 那么这样写: __block typeof(self) tmpSelf = self; 和 __weak typeof

__weak与__block修饰符到底有什么区别

API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage type modifier. //At function level are __block vari

__weak与__block区别

__weak 本身是可以避免循环引用的问题的,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个 __strong 的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题 __block 本身无法避免循环引用的问题,但是我们可以通过在 block 内部手动把 blockObj 赋值为 nil 的方式来避免循环引用的问题.另外一点就是 __block 修饰的变量在 block 内外都是唯一的,要

[iOS] Obnjective-C 中的 __block 是什么意思

__block 的标记告诉编译器,这个变量在 block 里面需要做特殊处理. 一般来说,在 block 中用的变量值是被复制过来的,所以对于变量本身的修改并不会影响这个变量的真实值.而当我们用 __block 标记的时候,表示在 block 中的修改对于 block 外也是有效地. 具体可参见 https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.ht

ios的__weak、__strong关键字

这个是针对arc来说的 __weak是弱引用 __strong是强引用 官方的说明如下 __strong is the default. An object remains “alive” as long as there is a strong pointer to it. 强引用是默认的,对象像强指针一样持久的存在 __weak specifies a reference that does not keep the referenced object alive. A weak refer

__block __weak

IOS BLOCK收集 在ios,blocks是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:blocks是inline的,并且它对局部变量是只读的. Blocks的定义:          int (^Multiply)(int, int) = ^(int num1, int num2) {return num1 * num2;}; 定义了一个Multiply的block