我有一个实例变量* TangramLevel(:UIView)currentLevel;在我的viewController类,我有一个实例分配在开始(它是retainCount 1)。我将它附加到视图[self.view addSubview:currentLevel];(retainCount 2)。解除分配后无法分配UIView子类的新实例
当关卡完成时,它通知控制器,所以控制器将其从视图中移除[currentLevel removeFromSuperview];(retainCount 1),并释放分配的实例 - [currentLevel release]; - ,让它解除分配(retainCount 0 =调用dealloc)。
然后在下一行控制器想要为另一个级别的数据分配/ addSubview一个新的级别实例,但应用程序崩溃(EXEC BAD ACCESS)。
如果我在removeFromSuperview之后没有释放currentLevel,appliaction可以工作,但是我有一个未使用的级别实例留在内存中,这也是一个问题(主要问题本身)。
上面写的方法有问题吗?或者错误在其他地方,也许在水平班?我在关卡中分配了一些UIImageView,但是我在release dealloc方法中释放了每个分配的对象。有任何想法吗?
你可以发布更多的代码(最好在实际的代码块)吗?事件的基本顺序听起来很好,所以我猜这个问题在你的关卡类中。可能它的dealloc方法释放了其他地方仍在使用的东西? – walkytalky 2009-11-30 12:29:05
好吧,事情的基本顺序听起来很可疑。请参阅下面的答案 - iVar的内存管理(以及访问iVar)应由其访问者处理,而不是在其他地方操作。我强烈怀疑设计问题。 OP确实需要发布他/她的代码。 – 2009-11-30 15:11:08