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

Iphone OpenFlow在尝试重置/重新创建应用程序时崩溃,iphone,crash,reset,openflow,Iphone,Crash,Reset,Openflow,我正在拼命地尝试在一个OpenFlow实例上更改图像,但运气不好。 我有点放弃了,所以我现在尝试删除该实例并创建一个新实例。但我无法避免应用程序崩溃 创建它的代码是: AFOpenFlowView *of = [[AFOpenFlowView alloc] initWithFrame:CGRectMake(0, 100, 320, 380)]; [of setCenter:CGPointMake(160, 240)]; [of setBackgroundColor:[UIColor blac

我正在拼命地尝试在一个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对象以重新填充它而不必删除/重新创建它,您有什么想法吗?或者如何可靠地创建/重新创建?

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

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

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

然后将其从superview中删除,superview将其释放,因此其保留计数为0,对象将被解除分配

然后您再次尝试释放它,它会崩溃,因为您正在向解除分配的对象发送
release

长话短说,在这种情况下,您不需要在从superview中删除它之后释放它


此外,如果您释放指针并且不再关心指针指向的是什么,则最好将nil指定给指针。这是因为在释放和释放对象后,指针变量仍然指向该对象用来占用的内存。如果您试图将消息发送到悬空指针指向的任何对象,则为指针指定nil可防止任何不好的情况发生。

这真的需要[peopleFlow release]吗?您是否将其保留在视图之外的其他位置?非常感谢。我不太明白计数的原理。但我觉得我现在有了更好的理解。回答得很好。