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

标签 ios

我对保留周期有一些想法。如果我在 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/

相关文章:

ios - ipad:为什么我的连续动画的第一个动画总是立即完成?

iOS Google Places API : "This IP, site or mobile application is not authorized to use this API key"

ios - 如何使用连接 USB 线调试在移动设备中执行的 iOS 应用程序(不是由 Xcode 启动)

ios - iOS 中的 Storyboard问题

iOS 辅助功能 - 以按钮为中心

ios - 如何在 UIView 中呈现 SFSafariViewController

iOS - iPhone 6 模拟器上的尺寸错误

ios - Instagram 的缩放是如何工作的?

ios - 如何在 Objective-C (iOS) 中的图像上写文字?

ios - 如何在 ios 中使用 jwplayer 播放 youtube 视频?