关于子视图的问题保留了Objective-C中的superview

时间:2010-10-19 00:42:08

标签: objective-c memory-management ios

这是内存管理问题。

假设我有一个视图A,它有一个指向其子视图的指针B.我使用@property(nonatomic, retain)参考视图B.

现在在子视图B中,我需要一个指针指向其超级视图A.所以我使用另一个@property(nonatomic, retain)参考其超级视图A.

这是我的担忧,我读过一篇关于保留和发布目标c中的内容的文章Hold Me, Use Me, Free Me。它提到了 “保留周期” 。所以它说子视图不需要保留其超级视图,实际上如果它这样做会是多余的。这是否意味着在我的例子中,子视图B只需要使用@property(nonatomic)参考其超级视图A? THX!

BTW,如果我没有在@property中为视图A写保留,我是否需要在dealloc方法中使用[viewA release]

3 个答案:

答案 0 :(得分:3)

每个子视图都有一个指向其超级视图的指针。它由NSView类管理。见-[NSView superview]。因此,您可以使用[self superview]self.superview并完全忽略内存管理。

如果由于某种原因想要继续,则需要指定superview属性是assign属性以避免警告。您也不会在-dealloc中发布它,因为您从未保留它。

简单地说:子视图不拥有他们的超级视图。

如果您要为iOS编码,只需将NSView替换为UIView并重新阅读。

答案 1 :(得分:0)

  

现在在子视图B中,我需要一个指针   回到它的超级视图A.

你已经有了一个。使用[self superview]

答案 2 :(得分:0)

您的UIView不应该需要UIViewController。你想做什么?如果您还没有,请阅读Apple的模型 - 视图 - 控制器样式的文档。