我有我的应用程序有问题,其中对于该代码是太长了进入,但我只想当我取出一个UIView,并用一个新的像这样替换它说:我如何正确丢弃子视图?
NSLog(@" .. %@", (Icon *)[self viewWithTag:index]);
Icon *icon = (Icon *)[self viewWithTag:index];
CGRect frame = icon.frame;
int tag = icon.tag;
[icon removeFromSuperview];
[icon release];
Icon *icon2 = [[Icon alloc] init];
icon2.frame = frame;
[icon2 makeIconStandardWithTag:(int)tag];
[self addSubview:icon2];
它做了一些奇怪的事情,第一次NSLog(因为视图已经存在)显示该对象是一个图标,但运行此代码后第二次显示它是一个UIImageView出于某种原因,现在它显示了我假定是屏幕上某个奇怪位置的原始图标。这是非常不稳定的行为。但我知道的是这样的:
删除[icon removeFromSuperview];行,尽管保持对象在那里,停止这种行为,并导致NSLog返回一个图标,因为它应该。
所以我的猜测是它不能正确删除图标。有没有办法完全删除图标,或者是我可以去的removeFromSuperview。我能做的只是将它设置为alpha = 0,但这更多的是修补解决方案,而不是我想如何解决它。
谢谢。虽然这还没有解决我的问题(这个问题与将它从超级视图中移除有关),这使我向前迈进了一步。 – Andrew 2011-05-23 18:59:58
这只是防止你无意中发送消息给非零但释放的对象。这在Garbage Collected环境中很有用,但不会在iOS上更快地发布该对象。 – Abizern 2011-05-23 19:00:21