【问题标题】:Does UINavigationBar retain UINavigationItems pushed onto its stack?UINavigationBar 是否保留推送到其堆栈上的 UINavigationItems?
【发布时间】:2010-06-21 17:12:10
【问题描述】:

UINavigationBar 是否保留推送到其堆栈上的导航项?换句话说,在这样做之后:

_myNavItem = [[UINavigationItem alloc]initWithTitle:@"Home"];
[self.navBar pushNavigationItem:_myNavItem animated:NO];

我需要释放 _myNavItem 吗:

    [_myNavItem release];

为了避免内存泄漏?

另外,我一般如何确定一个对象是否会被保留?任何 Objective C 集合都保持对添加到其中的所有元素的所有权只是一个约定吗?

【问题讨论】:

    标签: iphone memory-management uikit uinavigationbar


    【解决方案1】:

    ADC UINavigationBar Class Referenceitems 属性的定义中提到,它存储所有使用 NSArray 推送到导航堆栈的 UIViewController。

    转到NSArray Class Reference,它声明 NSArray 类的默认实现保留插入其中的每个对象,并在删除时释放它。

    将这两件事放在一起,可以安全地暗示UINavigationController 在将其推入堆栈时保留其所有 UIViewController。

    【讨论】:

      【解决方案2】:

      是的,UINavigationBar 保留其UINavigationItems。就像 NSArrayNSDictionary 保留其对象一样,UINavigationBar 也是如此。

      【讨论】:

      • 苹果文档中是否有任何地方说明了这一点,或者它只是一个一般约定?我并不怀疑你的回答,只是想知道下次我怎么能自己找到这个,而不是问 SO :)
      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多