Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内存警告导致在iOS7中释放僵尸_Ios_Memory - Fatal编程技术网

内存警告导致在iOS7中释放僵尸

内存警告导致在iOS7中释放僵尸,ios,memory,Ios,Memory,在这件事上我的头撞到了墙上 我有一个应用程序,它有一个根视图控制器和两个子视图控制器。其中一个子项是导航控制器。另一个视图中有一组按钮。按下菜单上的按钮时,将实例化相应的视图控制器,导航控制器将其视图控制器设置为包含此新控制器的单个项目阵列 所有这些都很好。问题是,如果我使用该应用程序一段时间,然后模拟一个内存警告,它在试图向僵尸发送消息时崩溃。僵尸每次都不同,但始终是已解除分配的视图控制器或视图控制器视图的子视图。例如,如果我将导航控制器设置为A,然后按下B,然后弹出B,我可以在B的解除锁定处

在这件事上我的头撞到了墙上

我有一个应用程序,它有一个根视图控制器和两个子视图控制器。其中一个子项是导航控制器。另一个视图中有一组按钮。按下菜单上的按钮时,将实例化相应的视图控制器,导航控制器将其视图控制器设置为包含此新控制器的单个项目阵列

所有这些都很好。问题是,如果我使用该应用程序一段时间,然后模拟一个内存警告,它在试图向僵尸发送消息时崩溃。僵尸每次都不同,但始终是已解除分配的视图控制器或视图控制器视图的子视图。例如,如果我将导航控制器设置为A,然后按下B,然后弹出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期间它没有被注销。回溯是毫无用处的。