再次分配对象

时间:2011-03-28 10:06:42

标签: iphone memory-management

我有以下代码:

[chart removeFromSuperview];
[chart release];
chart = nil;
BNPieChart *aChart = [[BNPieChart alloc] initWithFrame:self.view.frame];
self.chart = aChart;
[aChart release];

正如我想要的那样,图表正在解除分配,但在变量中仍然存在,接下来当我想将 aChart 分配给图表时有EXC_BAD_ACCESS。所以我决定将nil分配给图表。

这是一个好习惯吗?

3 个答案:

答案 0 :(得分:3)

更好的是,替换:

[chart release];
chart = nil;

使用:

self.chart = nil;

您获得BAD_ACCESS,因为当您使用点语法分配保留/复制属性时,它会自动释放。因此它即使这样也能正常工作:

[chart removeFromSuperview];
BNPieChart *aChart = [[BNPieChart alloc] initWithFrame:self.view.frame];
self.chart = aChart;

self.chart = aChart会为您发布。

答案 1 :(得分:1)

HI badeleux ...我想不是因为你得到错误或崩溃EXE_BAD_ACCESS。您试图访问已发布的内容。

答案 2 :(得分:1)

如果您已将图表设置为保留属性,而不是使用

[chart release];
chart = nil;

你可以写;

self.chart = nil;

您可以执行此操作,因为@synthesize图表生成的自动代码将为您执行发布。许多人认为这是更好的做法,因为它将确保消息不会意外地发送到非零对象。