2010-07-16 48 views
0

我试图拼命地更改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对象重新填充而不必删除/重新创建的任何想法?或者如何可靠地创建/重新创建?

+0

[peopleFlow发布]真的有必要吗?除了添加到视图中之外,您是否保留它? – willcodejavaforfood 2010-07-16 13:20:53

回答

0

当您创建peopleFlow例如,它有1

一个保留计数然后,当您添加它作为一个子视图,超级视图保留它,所以它的保留计数为2

然后你将它添加到超级视图后释放它,所以它的保留计数是1。

然后,您将其从超级视图中移除,并且超级视图将其释放,因此它的保留计数为0,并且对象被释放。

然后您尝试再次释放它,并且因为您将release发送到释放对象而崩溃。长话短说,在这种情况下,您不需要在将它从超级视图中移除后将其释放。

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

+0

非常感谢。 我不太了解保留计数的工作原理。但我觉得我现在有了更好的理解。 辉煌答案。 – jordi 2010-07-16 16:57:45

相关问题