Ios 导致神秘僵尸的presentModalViewController

Ios 导致神秘僵尸的presentModalViewController,ios,presentmodalviewcontroller,Ios,Presentmodalviewcontroller,我有一个奇怪的僵尸虫子,它似乎是在一个长期存在的应用程序中从木制品中爬出来的。我喜欢认为我知道自己在做什么,僵尸通常是直接修复的,但这一点让我感到困惑 Instruments报告说僵尸对象是一个视图,我将它作为模式视图MyPopUpViewController呈现。下面是显示模态视图控制器的代码 MyPopUpViewController *popUpViewController = [[MyPopUpViewController alloc] init]

我有一个奇怪的僵尸虫子,它似乎是在一个长期存在的应用程序中从木制品中爬出来的。我喜欢认为我知道自己在做什么,僵尸通常是直接修复的,但这一点让我感到困惑

Instruments报告说僵尸对象是一个视图,我将它作为模式视图MyPopUpViewController呈现。下面是显示模态视图控制器的代码

MyPopUpViewController *popUpViewController =
                    [[MyPopUpViewController alloc] init];

UINavigationController *navigationController =
                    [[UINavigationController alloc] initWithRootViewController:popUpViewController];

[popUpViewController release];

[self.tabBarController presentModalViewController:navigationController animated:YES]; // zombie occurs here

                [navigationController release];
在MyPopUpViewConroller中,当用户点击导航栏上的“完成”时,模态视图控制器将被解除—这是标准的功能,100次或更多次中有99次有效

然而,如果我快速进出模态对话框,并且仅在我所看到的模拟器上,我会得到下面报告的僵尸

现在,我相信如果我将MyPopUpViewController推到导航控制器上,它将被导航控制器保留,所以我可以安全地释放它。同样,tabBarController将保留导航控制器,因此我也可以安全地释放它,如代码所示

从Instruments diagnostics中,这些是我唯一保留/发布的MyPopUpViewController,请参见“责任”列中对“myapp”的引用,而后来[显然?]导致僵尸的是iOS内部

我想知道为什么我会看到这个僵尸。谢谢

#   Address Category    Event Type  RefCt   Timestamp   Size    Responsible Library Responsible Caller
0   0x14532980  MyPopUpViewController   Malloc  1   00:10.669.925   176 myapp   -[MyPopUpViewController tableView:didSelectRowAtIndexPath:]
1   0x14532980  MyPopUpViewController   Retain  2   00:10.670.707   0   UIKit   -[UIViewController _addChildViewController:performHierarchyCheck:]
2   0x14532980  MyPopUpViewController   Retain  3   00:10.670.721   0   UIKit   -[UINavigationController topViewController]
3   0x14532980  MyPopUpViewController   Autorelease <null>  00:10.670.723   0   UIKit   -[UINavigationController topViewController]
4   0x14532980  MyPopUpViewController   Release 2   00:10.671.467   0   myapp   -[MyPopUpViewController tableView:didSelectRowAtIndexPath:]
5   0x14532980  MyPopUpViewController   Retain  3   00:10.671.494   0   UIKit   -[UINavigationController topViewController]
6   0x14532980  MyPopUpViewController   Autorelease <null>  00:10.671.496   0   UIKit   -[UINavigationController topViewController]
7   0x14532980  MyPopUpViewController   Retain  4   00:10.671.497   0   UIKit   -[UINavigationController topViewController]
8   0x14532980  MyPopUpViewController   Autorelease <null>  00:10.671.497   0   UIKit   -[UINavigationController topViewController]
9   0x14532980  MyPopUpViewController   Retain  5   00:10.672.129   0   UIKit   -[UINavigationController topViewController]
10  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.130   0   UIKit   -[UINavigationController topViewController]
11  0x14532980  MyPopUpViewController   Retain  6   00:10.672.131   0   UIKit   -[UINavigationController topViewController]
12  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.132   0   UIKit   -[UINavigationController topViewController]
13  0x14532980  MyPopUpViewController   Retain  7   00:10.672.138   0   UIKit   -[UINavigationController topViewController]
14  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.139   0   UIKit   -[UINavigationController topViewController]
15  0x14532980  MyPopUpViewController   Retain  8   00:10.672.140   0   UIKit   -[UINavigationController topViewController]
16  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.141   0   UIKit   -[UINavigationController topViewController]
17  0x14532980  MyPopUpViewController   Retain  9   00:10.672.489   0   UIKit   -[UINavigationController topViewController]
18  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.490   0   UIKit   -[UINavigationController topViewController]
19  0x14532980  MyPopUpViewController   Retain  10  00:10.672.491   0   UIKit   -[UINavigationController topViewController]
20  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.492   0   UIKit   -[UINavigationController topViewController]
21  0x14532980  MyPopUpViewController   Retain  11  00:10.672.796   0   UIKit   -[UINavigationController topViewController]
22  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.797   0   UIKit   -[UINavigationController topViewController]
23  0x14532980  MyPopUpViewController   Retain  12  00:10.672.801   0   UIKit   -[UINavigationController topViewController]
24  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.802   0   UIKit   -[UINavigationController topViewController]
25  0x14532980  MyPopUpViewController   Retain  13  00:10.672.804   0   UIKit   -[UINavigationController topViewController]
26  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.804   0   UIKit   -[UINavigationController topViewController]
27  0x14532980  MyPopUpViewController   Retain  14  00:10.672.829   0   UIKit   -[UINavigationController topViewController]
28  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.830   0   UIKit   -[UINavigationController topViewController]
29  0x14532980  MyPopUpViewController   Retain  15  00:10.672.830   0   UIKit   -[UINavigationController topViewController]
30  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.832   0   UIKit   -[UINavigationController topViewController]
31  0x14532980  MyPopUpViewController   Retain  16  00:10.686.674   0   UIKit   -[UINib instantiateWithOwner:options:]
32  0x14532980  MyPopUpViewController   Retain  17  00:10.686.696   0   UIKit   +[UIProxyObject addMappingFromIdentifier:toObject:forCoder:]
33  0x14532980  MyPopUpViewController   Retain  18  00:10.687.241   0   UIKit   -[UIProxyObject initWithCoder:]
34  0x14532980  MyPopUpViewController   Retain  19  00:10.687.244   0   UIKit   -[UIRuntimeConnection initWithCoder:]
35  0x14532980  MyPopUpViewController   Retain  20  00:10.687.254   0   UIKit   -[UIRuntimeConnection initWithCoder:]
36  0x14532980  MyPopUpViewController   Retain  21  00:10.687.261   0   UIKit   -[UIRuntimeConnection initWithCoder:]
37  0x14532980  MyPopUpViewController   Retain  22  00:10.687.270   0   UIKit   -[UIRuntimeConnection initWithCoder:]
38  0x14532980  MyPopUpViewController   Retain  23  00:10.689.785   0   UIKit   UINibDecoderDecodeObjectForValue
39  0x14532980  MyPopUpViewController   Retain  24  00:10.689.806   0   UIKit   UINibDecoderDecodeObjectForValue
40  0x14532980  MyPopUpViewController   Release 23  00:10.690.037   0   UIKit   -[UINib instantiateWithOwner:options:]
41  0x14532980  MyPopUpViewController   Release 22  00:10.690.056   0   UIKit   +[UIProxyObject removeMappingsForCoder:]
42  0x14532980  MyPopUpViewController   Release 21  00:10.690.086   0   UIKit   -[UINibDecoder finishDecoding]
43  0x14532980  MyPopUpViewController   Release 20  00:10.690.117   0   UIKit   -[UINibDecoder finishDecoding]
44  0x14532980  MyPopUpViewController   Release 19  00:10.690.124   0   UIKit   -[UIRuntimeConnection dealloc]
45  0x14532980  MyPopUpViewController   Release 18  00:10.690.134   0   UIKit   -[UIRuntimeConnection dealloc]
46  0x14532980  MyPopUpViewController   Release 17  00:10.690.155   0   UIKit   -[UINibDecoder finishDecoding]
47  0x14532980  MyPopUpViewController   Release 16  00:10.690.166   0   UIKit   -[UIRuntimeConnection dealloc]
48  0x14532980  MyPopUpViewController   Release 15  00:10.690.174   0   UIKit   -[UIRuntimeConnection dealloc]
49  0x14532980  MyPopUpViewController   Retain  16  00:10.690.494   0   UIKit   -[UINavigationController topViewController]
50  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.690.497   0   UIKit   -[UINavigationController topViewController]
51  0x14532980  MyPopUpViewController   Retain  17  00:10.690.510   0   UIKit   -[UINavigationController topViewController]
52  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.690.511   0   UIKit   -[UINavigationController topViewController]
53  0x14532980  MyPopUpViewController   Retain  18  00:10.690.521   0   UIKit   -[UINavigationController topViewController]
54  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.690.522   0   UIKit   -[UINavigationController topViewController]
55  0x14532980  MyPopUpViewController   Retain  19  00:10.695.693   0   UIKit   -[UINavigationController topViewController]
56  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.695.693   0   UIKit   -[UINavigationController topViewController]
57  0x14532980  MyPopUpViewController   Retain  20  00:10.695.704   0   UIKit   -[UINavigationController _startTransition:fromViewController:toViewController:]
58  0x14532980  MyPopUpViewController   Release 19  00:10.695.721   0   UIKit   -[UINavigationController _startTransition:fromViewController:toViewController:]
59  0x14532980  MyPopUpViewController   Retain  20  00:10.701.163   0   UIKit   -[UINavigationController topViewController]
60  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.701.164   0   UIKit   -[UINavigationController topViewController]
61  0x14532980  MyPopUpViewController   Retain  21  00:10.701.212   0   UIKit   -[UIResponder becomeFirstResponder]
62  0x14532980  MyPopUpViewController   Release 20  00:10.701.235   0   UIKit   -[UIResponder becomeFirstResponder]
63  0x14532980  MyPopUpViewController   Retain  21  00:10.701.302   0   UIKit   -[UINavigationController topViewController]
64  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.701.302   0   UIKit   -[UINavigationController topViewController]
65  0x14532980  MyPopUpViewController   Retain  22  00:10.701.304   0   UIKit   -[UINavigationController topViewController]
66  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.701.304   0   UIKit   -[UINavigationController topViewController]
67  0x14532980  MyPopUpViewController   Retain  23  00:10.701.342   0   UIKit   -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:]
68  0x14532980  MyPopUpViewController   Release 22  00:10.701.356   0   UIKit   -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:]
69  0x14532980  MyPopUpViewController   Retain  23  00:10.701.386   0   UIKit   -[UINavigationController topViewController]
70  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.701.387   0   UIKit   -[UINavigationController topViewController]
71  0x14532980  MyPopUpViewController   Retain  24  00:10.701.399   0   UIKit   -[UIResponder becomeFirstResponder]
72  0x14532980  MyPopUpViewController   Release 23  00:10.701.414   0   UIKit   -[UIResponder becomeFirstResponder]
73  0x14532980  MyPopUpViewController   Release 22  00:10.701.762   0   GraphicsServices    GSEventRunModal
74  0x14532980  MyPopUpViewController   Release 21  00:10.701.774   0   GraphicsServices    GSEventRunModal
75  0x14532980  MyPopUpViewController   Release 20  00:10.701.775   0   GraphicsServices    GSEventRunModal
76  0x14532980  MyPopUpViewController   Release 19  00:10.701.809   0   GraphicsServices    GSEventRunModal
77  0x14532980  MyPopUpViewController   Release 18  00:10.701.821   0   GraphicsServices    GSEventRunModal
78  0x14532980  MyPopUpViewController   Release 17  00:10.701.943   0   GraphicsServices    GSEventRunModal
79  0x14532980  MyPopUpViewController   Release 16  00:10.701.945   0   GraphicsServices    GSEventRunModal
80  0x14532980  MyPopUpViewController   Release 15  00:10.701.947   0   GraphicsServices    GSEventRunModal
81  0x14532980  MyPopUpViewController   Release 14  00:10.701.985   0   GraphicsServices    GSEventRunModal
82  0x14532980  MyPopUpViewController   Release 13  00:10.701.985   0   GraphicsServices    GSEventRunModal
83  0x14532980  MyPopUpViewController   Release 12  00:10.701.989   0   GraphicsServices    GSEventRunModal
84  0x14532980  MyPopUpViewController   Release 11  00:10.701.989   0   GraphicsServices    GSEventRunModal
85  0x14532980  MyPopUpViewController   Release 10  00:10.701.990   0   GraphicsServices    GSEventRunModal
86  0x14532980  MyPopUpViewController   Release 9   00:10.702.017   0   GraphicsServices    GSEventRunModal
87  0x14532980  MyPopUpViewController   Release 8   00:10.702.018   0   GraphicsServices    GSEventRunModal
88  0x14532980  MyPopUpViewController   Release 7   00:10.702.039   0   GraphicsServices    GSEventRunModal
89  0x14532980  MyPopUpViewController   Release 6   00:10.702.040   0   GraphicsServices    GSEventRunModal
90  0x14532980  MyPopUpViewController   Release 5   00:10.702.041   0   GraphicsServices    GSEventRunModal
91  0x14532980  MyPopUpViewController   Release 4   00:10.702.042   0   GraphicsServices    GSEventRunModal
92  0x14532980  MyPopUpViewController   Release 3   00:10.702.051   0   GraphicsServices    GSEventRunModal
93  0x14532980  MyPopUpViewController   Release 2   00:10.702.052   0   GraphicsServices    GSEventRunModal
94  0x14532980  MyPopUpViewController   Release 1   00:10.702.096   0   GraphicsServices    GSEventRunModal
95  0x14532980  MyPopUpViewController   Retain  2   00:10.702.195   0   UIKit   -[UINavigationController topViewController]
96  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.702.196   0   UIKit   -[UINavigationController topViewController]
97  0x14532980  MyPopUpViewController   Release 1   00:10.709.439   0   QuartzCore  CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*)
98  0x14532980  MyPopUpViewController   Retain  2   00:11.110.856   0   UIKit   -[UINavigationController topViewController]
99  0x14532980  MyPopUpViewController   Autorelease <null>  00:11.110.856   0   UIKit   -[UINavigationController topViewController]
100 0x14532980  MyPopUpViewController   Retain  3   00:11.110.858   0   UIKit   -[UINavigationController topViewController]
101 0x14532980  MyPopUpViewController   Autorelease <null>  00:11.110.859   0   UIKit   -[UINavigationController topViewController]
102 0x14532980  MyPopUpViewController   Retain  4   00:11.110.924   0   UIKit   -[UINavigationController topViewController]
103 0x14532980  MyPopUpViewController   Autorelease <null>  00:11.110.925   0   UIKit   -[UINavigationController topViewController]
104 0x14532980  MyPopUpViewController   Release 3   00:11.111.052   0   GraphicsServices    GSEventRunModal
105 0x14532980  MyPopUpViewController   Release 2   00:11.111.053   0   GraphicsServices    GSEventRunModal
106 0x14532980  MyPopUpViewController   Release 1   00:11.111.054   0   GraphicsServices    GSEventRunModal
107 0x14532980  MyPopUpViewController   Retain  2   00:12.862.301   0   UIKit   -[UINavigationController topViewController]
108 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.303   0   UIKit   -[UINavigationController topViewController]
109 0x14532980  MyPopUpViewController   Retain  3   00:12.862.304   0   UIKit   -[UINavigationController topViewController]
110 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.305   0   UIKit   -[UINavigationController topViewController]
111 0x14532980  MyPopUpViewController   Retain  4   00:12.862.370   0   UIKit   -[UINavigationController topViewController]
112 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.371   0   UIKit   -[UINavigationController topViewController]
113 0x14532980  MyPopUpViewController   Retain  5   00:12.862.373   0   UIKit   -[UINavigationController visibleViewController]
114 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.374   0   UIKit   -[UINavigationController visibleViewController]
115 0x14532980  MyPopUpViewController   Retain  6   00:12.862.376   0   UIKit   -[UINavigationController visibleViewController]
116 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.377   0   UIKit   -[UINavigationController visibleViewController]
117 0x14532980  MyPopUpViewController   Retain  7   00:12.862.774   0   UIKit   -[UINavigationController topViewController]
118 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.776   0   UIKit   -[UINavigationController topViewController]
119 0x14532980  MyPopUpViewController   Release 6   00:12.877.586   0   Foundation  -[NSAutoreleasePool release]
120 0x14532980  MyPopUpViewController   Release 5   00:12.877.604   0   Foundation  -[NSAutoreleasePool release]
121 0x14532980  MyPopUpViewController   Release 4   00:12.877.604   0   Foundation  -[NSAutoreleasePool release]
122 0x14532980  MyPopUpViewController   Release 3   00:12.877.605   0   Foundation  -[NSAutoreleasePool release]
123 0x14532980  MyPopUpViewController   Release 2   00:12.877.610   0   Foundation  -[NSAutoreleasePool release]
124 0x14532980  MyPopUpViewController   Release 1   00:12.877.611   0   Foundation  -[NSAutoreleasePool release]
125 0x14532980  MyPopUpViewController   Retain  2   00:13.292.620   0   UIKit   -[UINavigationController topViewController]
126 0x14532980  MyPopUpViewController   Autorelease <null>  00:13.292.621   0   UIKit   -[UINavigationController topViewController]
127 0x14532980  MyPopUpViewController   Release 1   00:13.292.700   0   UIKit   -[UIViewController dealloc]
128 0x14532980  MyPopUpViewController   Release 0   00:13.292.853   0   GraphicsServices    GSEventRunModal
129 0x14532980  MyPopUpViewController   Zombie  -1  00:13.439.920   0   UIKit   -[UIPickerView _sendSelectionChangedForComponent:]

僵尸可能是您在MyPopUpViewController中管理的某个对象吗?我注意到僵尸错误消息引用了[UIPickerView\u sendSelectionChangedForComponent:]。我想知道这和控制器有什么关系


一种可能是UIPicker试图在模式被解除后向其代理(我想是您的控制器)发送消息。解决此问题的一种方法是在控制器的release方法中将UIPicker委托属性设置为nil。请尝试一下;我希望这能有所帮助……

谢谢你的回复。是的,模态视图显示了一个选择器-僵尸诊断会报告更高的对象吗?感谢您对代表的调用进行的额外编辑,我在您第一次评论后仔细检查了代码,得出了相同的结论,并提出了相同的修复方案,目前正在进行测试-这一直是一个棘手的bug,但自从修复之后,我就没有看到这个问题。我认为这很微妙,但符合模拟器与iPhone等的时间差异。谢谢你的帮助。