【问题标题】:how is the setView method in uiviewcontroller implemented?uiviewcontroller中的setView方法是如何实现的?
【发布时间】:2011-10-02 07:57:09
【问题描述】:

我正在尝试覆盖 UIViewController 子类中的设置器 setView,原因是 UIViewController 中的 setView 自动释放视图,我想自己处理内存管理。

我正在尝试用下面的 setView 覆盖 setView:

-(void)setView:(UIView *)view
{
if (_view != view)
   {
    [_view release];
    _view = [view retain];
   }
}

但是编译器似乎没有找到 _view ivar,所以我很想知道 UIViewController 中的 setView 设置器是什么样的?或者我可以自己处理视图属性内存的任何其他方式?

【问题讨论】:

  • 你为什么要这样做?
  • 我的视图控制器有一个自定义视图,它有一个渲染循环并尝试访问已经发布的变量。所以我试图在它这样做之前发布这个视图。
  • 通常的做法是在发布时将这些变量设为 nil,然后在访问它们时检查 nil,不是吗?然后,如果它们为 nil,则可以取消渲染循环。
  • @mackworth 是的,我正在考虑这种方法,但我认为它会很混乱。我最终只是将它们留在内存中并检查属性以呈现变量。将它们留在记忆中可能是一个坏主意,但我认为现在可以。谢谢大家

标签: iphone objective-c cocoa-touch uikit


【解决方案1】:

大致应该是这样的:

-(void)setView:(UIView *)view
{
    if (_view != view)
    {
        [_view release]; // Release _view, not view
        _view = [view retain];
    }
}

【讨论】:

  • 有自动释放部分吗?据我了解,视图被添加到自动释放池中
  • 另一种方法是:[_view autorelease]; _view = [view retain] 没有 if 语句。
【解决方案2】:

您始终可以在设置之前保留视图。在 ref 计数

【讨论】:

  • 我实际上试图在它自动释放之前释放它
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 2015-11-15
  • 2017-04-16
  • 2013-09-19
相关资源
最近更新 更多