如果我在块内使用ivar,它是一个保留周期吗?

时间:2015-08-10 02:25:22

标签: ios

我对保留周期有所了解。如果我在块内使用self.variable。据说我让视图控制器保留了块,块保留了自我保留的self.property。所以保留周期发生。但是,如果我声明一个实例变量,并且我在块中使用它,它是一个保留周期吗?如果是,如何解决问题?

代码是:

pos >= size()

1 个答案:

答案 0 :(得分:1)

是的,仍然会保留自己

您应该通过弱实例引用ivar:

@interface ViewController (){
    NSString *phone;
}
@end
-(void)example
{
    __weak typeof(self) weakSelf = self;
    [self.varble ^block
     {
         typeof(self) self = weakSelf;
         self->phone=@"abc";// a retain cycle?
     }];

}

或者,如果您没有更改该值(只是简单地使用它),请将ivar的值复制到局部变量中:

@interface ViewController (){
    NSString *phone;
}
@end
-(void)example
{
    NSString *phoneValue = [phone copy]; // the copy is optional, but good practice
    [self.varble ^block
     {
         [phoneValue someMethod];
     }];

}