0

我拼命尝试更改 OpenFlow 实例上的图像,但没有成功。我有点放弃,所以我现在正在尝试删除实例并创建一个新实例。但我无法避免应用程序崩溃。

创建它的代码是:

AFOpenFlowView *of = [[AFOpenFlowView alloc] initWithFrame:CGRectMake(0, 100, 320, 380)];
 [of setCenter:CGPointMake(160, 240)];
 [of setBackgroundColor:[UIColor blackColor]]; 
 [of setDataSource:self];
 [of setViewDelegate:self];

 [self setPeopleFlow:of];      
 [self.view addSubview:peopleFlow];

 [of release];

然后,单击一个按钮,我执行以下操作:

[peopleFlow removeFromSuperview];
[peopleFlow release];

稍后我用第一个代码块调用相同的函数来再次创建它,此时应用程序崩溃且没有日志错误。

关于如何清理 OpenFlow 对象以重新填充它而无需删除/重新创建的任何想法?或者如何可靠地创建/重新创建?

4

1 回答 1

0

创建 peopleFlow 实例时,它的保留计数为 1。

然后当你将它添加为子视图时,超级视图会保留它,所以它的保留计数是 2。

然后在将其添加到超级视图后释放它,因此它的保留计数再次为 1。

然后你从超级视图中删除它,超级视图释放它,所以它的保留计数为 0 并且对象被释放。

然后你尝试再次释放它,它崩溃了,因为你正在发送release一个被释放的对象。

长话短说,在这种情况下,您不需要在将其从超级视图中删除后释放它。

此外,如果您释放指针并且不再关心指向的内容,则将 nil 分配给指针是一种很好的做法。这是因为在释放和释放对象后,指针变量仍然指向该对象曾经占用的内存。如果您尝试向悬空指针指向的任何内容发送消息,则将 nil 分配给指针可防止发生任何不良情况。

于 2010-07-16T13:23:18.773 回答