objective-c - 关于 subview 在 objective-C 中保留 superview 的问题

标签 objective-c memory-management ios

这是内存管理问题。

假设我有一个 View A,它有一个指向其 subview B 的指针。我使用 @property(nonatomic, retain) 引用 View B。

现在在 subview B 中,我需要一个指向它的父 View A 的指针。所以我使用另一个 @property(nonatomic, retain) 来引用它的父 View A。

这是我的担忧,我读过一篇文章Hold Me, Use Me, Free Me关于在 objective-c 中保留和释放内容。它提到了“保留周期”。所以它说 subview 不需要保留它的父 View ,实际上如果它这样做是多余的。这是否意味着在我的示例中, subview B 只需要使用 @property(nonatomic) 引用其父 View A?谢谢!

顺便说一句,如果我没有在 View A 的@property 中写保留,我是否需要在 dealloc 方法中[viewA release]

最佳答案

每个 subview 都有一个指向其父 View 的指针。它由 NSView 类管理。参见-[NSView superview]。因此,您可以只使用 [self superview]self.superview 并完全忽略内存管理。

如果您出于任何原因想要继续,您需要指定 superview 属性是一个分配属性以避免警告。您也不会在 -dealloc 中释放它,因为您从未保留过它。

简单地说: subview 不拥有它们的父 View 。

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

关于objective-c - 关于 subview 在 objective-C 中保留 superview 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3964593/

相关文章:

iphone - 统计应用程序在 xcode 中被打开的次数

c++ - C++ 中带有 void 指针的单元测试函数

c - 为作为结构一部分的字符指针分配内存

ios - 在 swift 的 navigationStack 之上重用相同的 viewController

iphone - 移动 x 偏移时的 CGContextDrawImage

php - 使用 AWS IAM 的临时凭证

ios - 如何检查字体是否支持字符

c++ - 使用 C++ 在 Arduino 上编写复杂的程序。如何正确使用对象或更好地使用普通 C?

ios - 更改不可见的自定义 UITableviewCell 中的项目

javascript - 防止键盘在 iOS 中弹出