尝试重置/重新创建时,OpenFlow会崩溃应用程序

时间:2010-07-16 12:08:19

标签: iphone crash reset openflow

我正拼命想要在没有运气的情况下更改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对象以重新填充它而不必删除/重新创建的任何想法?或者如何可靠地创建/重建?

1 个答案:

答案 0 :(得分:0)

创建peopleFlow实例时,其保留计数为1.

然后当您将其添加为子视图时,超级视图会保留它,因此它的保留计数为2.

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

然后你从superview中删除它,superview发布它,所以它的retain count为0并且对象被释放。

然后你尝试再次发布它,它崩溃了,因为你发送release到一个解除分配的对象。

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

此外,如果您释放指针并且不关心指向的指针,则最好将nil指定给指针。这是因为在释放和释放对象之后,指针变量仍然指向对象用来占用的内存。如果您尝试向悬挂指针指向的任何内容发送消息,则为指针指定nil可防止发生任何不良事件。