我对保留周期有一些想法。如果我在 block 内使用 self.variable。据说我让view controller retains block,block retain the self.property,retain to self。所以发生了保留循环。但是,如果我声明一个实例变量,并在 block 内使用它,它是一个保留循环吗?如果是,如何解决问题?
代码是:
@interface ViewController (){
NSString *phone;
}
@end
-(void)example
{
[self.varble ^block
{
phone=@"abc";// a retain cycle?
}];
}
最佳答案
是的那还是会保留自己
您应该通过弱实例引用 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];
}];
}
关于ios - 如果我在 block 内使用ivar,它是一个保留周期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910838/