我有以下代码:
[chart removeFromSuperview];
[chart release];
chart = nil;
BNPieChart *aChart = [[BNPieChart alloc] initWithFrame:self.view.frame];
self.chart = aChart;
[aChart release];
正如我想要的那样,图表正在解除分配,但在变量中仍然存在,接下来当我想将 aChart 分配给图表时有EXC_BAD_ACCESS。所以我决定将nil分配给图表。
这是一个好习惯吗?
答案 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图表生成的自动代码将为您执行发布。许多人认为这是更好的做法,因为它将确保消息不会意外地发送到非零对象。