在block中使用self

__weak typeof(self) weakSelf = self;

[self doABlockOperation:^{

    __strong typeof(weakSelf) strongSelf = weakSelf;

    if(strongSelf) {

        ...

    }

}];

时间: 2024-08-11 05:30:24

在block中使用self的相关文章

多线程 block中self 强引用问题

#import "ViewController.h" @interface ViewController () // 定义一个全局的队列属性.方便在任何方法中都可以使用这个Queue @property (nonatomic,strong) NSOperationQueue *queue; // UI 控件用 weak 和 Strong 都没有问题. // 在开发中,基本会见到所有的UI控件都是用 Strong来做的. // UI控件一般不要用懒加载的方式加载.UI控件与用户是对应的.

block 中使用 weakSelf

在实际开发中,很多时候都在 block 中使用 weakSelf.那么什么时候需要使用 weakSelf,什么时候又不需要使用呢? 答案:当 block 不再被 self 持有,被其他对象所持有的时候,就不需要使用 weakSelf,举个例子,我们使用 UIView 的动画的时候,也就是 animateWithDuration的时候,就并不需要使用 weakSelf,因为他们的持有关系是,1.UIView 中某个负责动画的对象持有了 self 2.block 持有了 self,而不是 self

到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf

到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发.异步任务.但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 retain ‘self’,而 ‘self‘ 又 retain 了 Block.因为在 ObjC 中,直接调用一个实例变量,会被编译器处理成 ‘self->theVar’,’self’ 是一个

彻底分析block中的循环引用

我做了一个被push到的controller,pop的时候,controller会释放,解析详见注释,欢迎批评指正! #import "AnimaViewController.h" @interface AnimaViewController () @property (nonatomic, strong) UIView *view1; @property (nonatomic, strong) UIView *view2; @property (nonatomic, copy) vo

block中无法使用C数组变量

在Objective-C的block中无法使用C数组,即使我们不对C数组做任何改变,编译的时候也会报错: #include <stdio.h> int main() { const char text[] = "hello"; //声明数组类型变量 void (^blk)(void) = ^{ printf("%c\n", text[2]); //只是读取数组变量 }; } 这是编译之后的结果: 解决的办法是使用指针声明数组: #include <

Block中__block实现原理

三.Block中__block实现原理 我们继续研究一下__block实现原理. 1.普通非对象的变量 先来看看普通变量的情况. #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { __block int i = 0; void (^myBlock)(void) = ^{ i ++; NSLog(@"%d",i); }; myBlock(); return 0; } 把上述代

block 中使用__weak 和__strong修饰符的问题

在ARC环境下,我们常常会使用weak 的修饰符来修饰一个变量,防止其在block中被循环引用,但是有些特殊情况下,我们在block中又使用strong 来修饰这个在block外刚刚用__weak修饰的变量,为什么会有这样奇怪的写法呢? 后来上网查资料,给的解释就是下面的这段话: 在block中调用self会引起循环引用,但是在block中需要对weakSelf进行 strong,保证代码在执行到block中,self不会被释放,当block执行完后, 会自动释放该strongSelf: 对于程

关于block 中 何时使用 __weak/__block MyViewController * weakSelf 分析

说到block .想听我废话下它的基础. block 是一个闭包函数.所谓闭包就是 引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外. oc 中 block 默认创建后 分配在栈中..当向其 发送 copy 消息后 被移到堆上. 防止被释放. 由上面定义可以看出  block 会 保留在它所引用到的 一切变量. __block 参数是什么? 修饰变量时 做了什么? 它是一个存储类型. block 中体现为 不会保留 这样的变量. 同时 你可以在b

避免Block中的强引用环

[避免Block中的强引用环] In manual reference counting mode, __block id x; has the effect of not retaining x. In ARC mode, __block id x; defaults to retaining x (just like all other values). To get the manual reference counting mode behavior under ARC, you cou

关于block中使用weakSelf和strongSelf的问题

有时候我们会碰到这种情况, __weak typeof(self) weakSelf = self; [obj block:^(){ __strong typeof(weakSelf)strongSelf = weakSelf; }]; 我们都知道第一句是为了解决block的循环引用问题,那么在block中的语句是干什么用的呢? 网上查阅资料知道: 在block中调用self会引起循环引用,但是在block中需要对weakSelf进行 strong,保证代码在执行到block中,self不会被释