自动释放/分配理解
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 是否没有拼写错误(完全相同)。
【讨论】:
不,它不会被释放。以上是关于自动释放/分配理解的主要内容,如果未能解决你的问题,请参考以下文章