【问题标题】:Does this code cause a retain cycle?此代码是否会导致保留周期?
【发布时间】:2015-09-16 19:23:11
【问题描述】:

我有个问题,这条线会不会有什么麻烦?

self.window.rootViewController = self.viewController;

假设self 的两个属性都有一个retain 设置器:

@property(nonatomic, retain) UIViewcontroller viewController;

我的问题是这会导致任何奇怪的对象树或保留周期或内存问题吗? viewController 的保留计数为 2 所以如果 self 想要摆脱内存,它不能因为 self.window.rootViewController 仍然持有对它的引用?还是我完全错了?

【问题讨论】:

  • 只看箭头的方向。这看起来不像一个圆圈,是吗?
  • 这是绝对安全的。
  • 保留?请问您是为 iOS 4.0 开发的吗?
  • 即使在ARC 中,如果调用了它的setter,您仍然可以将您的@property 配置为retain。我看你可能是说应该是strong,你是对的。

标签: objective-c


【解决方案1】:

如果你只看箭头的方向,你会发现这里没有循环。视图控制器将只有两个所有者。

【讨论】:

    【解决方案2】:

    如果你想释放self.viewController,你需要清除两个引用:

    self.window.rootViewController = nil; // or some other controller
    self.viewController = nil; // or some other controller
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多