我在iOS5上运行我的应用时遇到了崩溃问题。 我有的代码星座:
InputEnded
”。InputEnded
。InputEnded
中, B 从超级视图中删除 A 的视图,删除事件处理程序,处理 A 并设置它为NULL。在iOS 4.3中,这可以正常工作,但A ViewDidDisappear()
永远不会被调用,但没关系。
然而,在iOS 5中,A的ViewDidDisappear()
DOES 会触发。它会在稍后的时间点被解雇。但问题是:即使A已经被处理也会发出(Handle == 0),因此它会崩溃!
我同时,A和BI覆盖bool AutomaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
并返回FALSE以保持与我在iOS 4.3中看到的相同的行为,但显然它总是会调用自己的ViewDidDisappear()
,无论你返回什么。
有人可以解释这里发生了什么,以及如何克服它?
答案 0 :(得分:0)
发生崩溃的原因是 A 不应该手动处理,只能归零。
处置 A 会破坏控制器的本机表示形式,对于iOS5 SDK,在稍后调用ViewDidDisappear
时仍需要它。 iOS4.3 SDK没有发生崩溃,因为它没有调用ViewDidDisappear
。
所以简单地忽略 A 意味着用户代码不再引用(托管)实例,并让GC稍后收集它(一旦没有别的引用它)。这适用于两个SDK版本,并且在两种情况下都回收内存(通过向 A 添加终结器以在执行后将字符串输出到MonoDevelop的应用程序输出来确认)。
完整的测试用例和说明可在bugzilla上找到。