可能的循环参考?

时间:2015-11-12 13:53:17

标签: ios objective-c cocoa-touch

我在Cocoa Touch中有一个名为PanelView的对象,它有一个UINavigationController实例变量。在我的应用中的某个时刻,当UINavigationController作为模态视图显示时,我将PanelView对象作为参数发送到rootViewController的{​​{1}}所在的位置存储为实例变量。我在.h文件中声明它通常如何:

UINavigationController

在.m文件中:

PanelView *_panelView;
@property(nonatomic, strong) PanelView *panelView;

到目前为止,我没有任何副作用,但我想知道我是否正确宣布这一点,因为它可能是一个循环引用。声明此变量的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

Objective-C已经发展到对语法非常宽容,特别是在iOS上。您实际上不需要声明作为@property的后备存储的变量 - 它将为您合成。

过去的情况是,如果您同时声明了一个getter 一个setter,那么您需要在@synthesize块中插入@implementation,就像您一样拥有它。我只是在Xcode 7.1中尝试过仔细检查,编译器没有抱怨Cocoa Touch项目或命令行应用程序项目。

从您的后续问题看,您需要理清数据的所有权。循环引用本身通常不是问题。保持强大循环引用是。这就是你如何获得导致泄漏的记忆周期。

我建议您将UINavigationView的引用更改为弱引用,因为只要PanelView存在,UINavigationView就会保证存在