内存警告导致在iOS7中释放僵尸
在这件事上我的头撞到了墙上 我有一个应用程序,它有一个根视图控制器和两个子视图控制器。其中一个子项是导航控制器。另一个视图中有一组按钮。按下菜单上的按钮时,将实例化相应的视图控制器,导航控制器将其视图控制器设置为包含此新控制器的单个项目阵列 所有这些都很好。问题是,如果我使用该应用程序一段时间,然后模拟一个内存警告,它在试图向僵尸发送消息时崩溃。僵尸每次都不同,但始终是已解除分配的视图控制器或视图控制器视图的子视图。例如,如果我将导航控制器设置为A,然后按下B,然后弹出B,我可以在B的解除锁定处断开,并看到它被移除。然后,如果我模拟一个警告,我将得到一个崩溃,因为有东西试图向B发送消息 以下是一个跟踪示例:内存警告导致在iOS7中释放僵尸,ios,memory,Ios,Memory,在这件事上我的头撞到了墙上 我有一个应用程序,它有一个根视图控制器和两个子视图控制器。其中一个子项是导航控制器。另一个视图中有一组按钮。按下菜单上的按钮时,将实例化相应的视图控制器,导航控制器将其视图控制器设置为包含此新控制器的单个项目阵列 所有这些都很好。问题是,如果我使用该应用程序一段时间,然后模拟一个内存警告,它在试图向僵尸发送消息时崩溃。僵尸每次都不同,但始终是已解除分配的视图控制器或视图控制器视图的子视图。例如,如果我将导航控制器设置为A,然后按下B,然后弹出B,我可以在B的解除锁定处
0 CoreFoundation ___forwarding___
1 CoreFoundation _CF_forwarding_prep_0
2 UIKit +[UIViewController _traverseViewControllerHierarchyWithDelayedReleaseArray:block:]
3 UIKit +[UIViewController _traverseViewControllerHierarchyWithDelayedRelease:]
4 UIKit -[UIApplication _performMemoryWarning]
5 UIKit -[UIApplication _receivedMemoryNotification]
6 UIKit __43-[UIApplication setReceivesMemoryWarnings:]_block_invoke_2
7 libdispatch.dylib _dispatch_client_callout
8 libdispatch.dylib _dispatch_source_latch_and_call
9 libdispatch.dylib _dispatch_source_invoke
10 libdispatch.dylib _dispatch_main_queue_callback_4CF
11 CoreFoundation __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
12 CoreFoundation __CFRunLoopRun
13 CoreFoundation CFRunLoopRunSpecific
14 CoreFoundation CFRunLoopRunInMode
15 GraphicsServices GSEventRunModal
16 GraphicsServices GSEventRun
17 UIKit UIApplicationMain
18 myapp main /Users/blahblahblah/main.m:18
19 libdyld.dylib start
崩溃前,应用程序代理调用了ApplicationIDReceiveMemoryWarning
,但在任何my view控制器上都没有调用didReceiveMemoryWarning
分析中没有泄漏和警告,我遵循安全壳视图控制器的规则。您找到解决方案了吗?是的。在我的情况下,这是由于一个悬而未决的参考。我在一个类别中注册了一个通知回调,所以在dealloc期间它没有被注销。回溯是毫无用处的。