首页 > iOS 关于block生命周期的问题

iOS 关于block生命周期的问题

1,testAction是类A的一个方法,当我把类A释放的时候,作为函数参数的testBlock依然存在,请问下这是为什么?有什么方法是能够让testBlock的生命周期和类A的生命周期保持一致的吗?

-(void)testAction:(void(^)())testBlock {
WS(weakSelf, self);
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    if (testBlock) { //此时weakSelf=nil 但是testBlock依然存在
    testBlock(); //会执行回调
    }
});
}

因为你的block是作为参数传过来的,也就是说,在这个方法没有执行完,block是一直存在的,你可以将block作为该类的属性或者成员变量,这样block的生命周期就和实例的生命周期一样了,当然这中情况下就要考虑block会不会持有对象了,可能会造成循环引用或者对象的延迟释放

【热门文章】
【热门文章】