以编程方式将uiviewcontroller创建为弱

时间:2016-12-07 01:47:21

标签: ios objective-c uiviewcontroller

我正在我这样的单身人士中创建uiviewcontroller。

BrowserVC *vc = [BrowserVC loadFromNib];
vc.titleName = @"Password Management";
[vc setData:@{@"url":url.absoluteString}];
vc.successBlock = ^(NSString *urlStr){
    if (![urlStr isEqualToString:url.absoluteString])
        [vc dismissViewControllerAnimated:YES completion:nil];
};

然后,我得到了这个通常的错误。

  

在此区块中强势捕获'vc'可能会导致保留   周期。

要解决该警告,我使用了__Weak或__unsafe_unretained。现在,问题进来了。我的vc在我发起后立即被释放。我甚至无法设置titleName。我该怎么办?

1 个答案:

答案 0 :(得分:4)

模式是这个

BrowserVC *vc = [BrowserVC loadFromNib];
vc.titleName = @"Password Management";
[vc setData:@{@"url":url.absoluteString}];

__weak __typeof(vc) weakVC = vc;

vc.successBlock = ^(NSString *urlStr){
    __typeof(vc) strongVC = weakVC;

    if (strongVC && ![urlStr isEqualToString:url.absoluteString])
        [strongVC dismissViewControllerAnimated:YES completion:nil];
};

您可以像往常一样创建视图控制器,然后创建对视图控制器的弱引用并将其传递到块中