我正拼命想要在没有运气的情况下更改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 :(得分:0)
创建peopleFlow实例时,其保留计数为1.
然后当您将其添加为子视图时,超级视图会保留它,因此它的保留计数为2.
然后在将其添加到superview后将其释放,因此它的保留计数再次为1。
然后你从superview中删除它,superview发布它,所以它的retain count为0并且对象被释放。
然后你尝试再次发布它,它崩溃了,因为你发送release
到一个解除分配的对象。
长话短说,在这种情况下,您不需要在从超级视图中删除它后将其释放。
此外,如果您释放指针并且不关心指向的指针,则最好将nil指定给指针。这是因为在释放和释放对象之后,指针变量仍然指向对象用来占用的内存。如果您尝试向悬挂指针指向的任何内容发送消息,则为指针指定nil可防止发生任何不良事件。