【问题标题】:how to retain view after addSubview of UIViewController with ARC如何在使用 ARC 的 UIViewController 的 addSubview 后保留视图
【发布时间】:2012-02-04 22:01:33
【问题描述】:

我使用ARC并添加UIViewController的视图时如何处理?

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[someView addSubview:vc.view]; //this retain vc.view

因为addSubview 保留onlu 视图,而不是controller,所以controller 被释放。在 ARC 之前,有一种方法可以将控制器保留多久,但如何防止 ARC 释放 View Controller?

【问题讨论】:

    标签: memory-management uiview


    【解决方案1】:

    我通过将 vc 声明为具有默认强属性的属性解决了类似的情况。

    【讨论】:

    • 我认为这是目前唯一的解决方案。只要声明的属性不会更改,视图控制器就会保留在内存中,并且始终保留一个控制器副本,即使它已从父视图控制器中删除(从 iOS 5.0 开始使用 removeFromParentViewController)
    【解决方案2】:

    #define AntiARCRetain(...) void *retainedThing = (<strong>bridge_retained void *)__VA_ARGS</strong>; retainedThing = retainedThing

    然后调用 AntiARCRetain(controller);

    【讨论】:

    • 它保留了对象。
    【解决方案3】:

    为什么需要一个新的 ViewController?
    您应该将您的视图添加为子视图并使用“someView”的 ViewController 处理所有内容

    【讨论】:

    • 因为释放 viewcontroller 时视图没有释放,如果您尝试对与(已经)释放的控制器相关的视图执行任何操作,这会导致崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多