自动释放/分配理解

Posted

技术标签:

【中文标题】自动释放/分配理解【英文标题】:Autorelease/Assign Comprehension 【发布时间】:2011-11-07 02:00:10 【问题描述】:

好的,我确实使用了很多自动释放/分配,但我现在遇到了一个我不明白的问题。为什么它不起作用可能很明显,但我真的希望你向我解释一下。

所以我有一个这样初始化的 UIViewController:

controller = [[[LBLogInViewController alloc] initWithNibName:@"LBLogInViewController" bundle:nil] autorelease];

之后,我给它设置了一个属性(非原子,赋值):

controller.settingsViewController = self;

为什么该属性不持久?我设置的值是superview的控制器,所以它不会被释放。它显然适用于 (nonatomic, retain) 但我想知道为什么 assign 在这里不起作用。

【问题讨论】:

你在做controller.settingsViewController = self和alloc一样的方法吗? 您使用的是“controller =”还是“self.controller =”?在你的头文件中控制器是如何声明的? 是的,就在初始化之后。 控制器初始化后,我设置为属性“self.contentViewController = controller”,非原子,赋值。 【参考方案1】:

如果 controller 被声明为 (nonatomic, retain) 并且您使用“controller =”而不是“self.controller =”,您将不会增加保留计数,因为您绕过了 setter并直接进入实例变量。

【讨论】:

没有看到我的评论?我先初始化它,然后使用 setter 设置属性。 你能发布显示控制器和settingsViewController如何声明的头文件吗?【参考方案2】:

检查您的@synthesize、@property 和 settingsViewController ivar 是否没有拼写错误(完全相同)。

【讨论】:

不,它不会被释放。

以上是关于自动释放/分配理解的主要内容,如果未能解决你的问题,请参考以下文章

iOS--------对堆栈 存储空间的理解

堆和栈的理解

自动释放并分配给 nil

我应该在重新分配之前调用分配给保留属性的自动释放对象的释放吗?

Stack&Heap的理解

资源分配和自动释放