消息发送到解除分配的实例

时间:2013-03-13 18:28:37

标签: iphone ios memory-management nszombie

经过一天多的时间阅读问题并尝试应用答案,我必须提出更多帮助。

我的ios6应用程序在主屏幕上有一个表格视图。选择一个单元格后,我们使用UINavigationBar访问一个视图控制器,该控制器有一个自定义的“后退”按钮,调用此方法:

- (IBAction)goback:(id)sender {
    [SVProgressHUD dismiss];
    if(self.presentingViewController) {
        NSLog(@"  Dismissing View Controller: %@.", self.presentingViewController);
        [self dismissViewControllerAnimated:NO completion:nil];
    }
}

通常,此方法效果很好。如果我们在加载内容之后非常快速地按下“后退”按钮(使用json和AFNetworking),它只会崩溃。 5秒后,后退按钮工作正常,但如果我们在加载后立即点击它,我们会收到此错误:

[28103:c07]   Dismissing View Controller:     <UITabBarController: 0x7578170>.
[28103:c07] *** -[CustomViewController respondsToSelector:]: message sent to deallocated instance 0x1257cf70

显然,这是一个记忆问题。这就是我试图追踪“僵尸”的原因。分析我的应用程序,我收到此报告。它表明有太多的释放,但我不知道哪一个是罪魁祸首。

有谁知道如何解释这份报告?

这条线是否正常?

84  0x10291ff0  Release 3   MyApp   __destroy_helper_block_

如果需要进一步的信息,请告诉我。我感谢你的帮助。

#   Address Event Type  RefCt   Responsible Library Responsible Caller
0   0x10291ff0  Malloc  1   UIKit   -[UIClassSwapper initWithCoder:]
1   0x10291ff0  Retain  2   UIKit   UINibDecoderDecodeObjectForValue
2   0x10291ff0  Retain  3   UIKit   -[UIRuntimeConnection initWithCoder:]
3   0x10291ff0  Retain  4   UIKit   -[UIRuntimeConnection initWithCoder:]
4   0x10291ff0  Retain  5   UIKit   UINibDecoderDecodeObjectForValue
5   0x10291ff0  Retain  6   UIKit   UINibDecoderDecodeObjectForValue
6   0x10291ff0  Retain  7   UIKit   -[UIStoryboardScene setSceneViewController:]
7   0x10291ff0  Retain  8   UIKit   -[UINib instantiateWithOwner:options:]
8   0x10291ff0  Release 7   UIKit   -[UINibDecoder finishDecoding]
9   0x10291ff0  Release 6   UIKit   -[UIRuntimeConnection dealloc]
10  0x10291ff0  Release 5   UIKit   -[UIRuntimeConnection dealloc]
11  0x10291ff0  Release 4   UIKit   -[UINibDecoder finishDecoding]
12  0x10291ff0  Release 3   UIKit   -[UINibDecoder finishDecoding]
13  0x10291ff0  Release 2   UIKit   -[UINibDecoder finishDecoding]
14  0x10291ff0  Retain  3   UIKit   -[UIStoryboardSegue initWithIdentifier:source:destination:]
15  0x10291ff0  Retain  4   UIKit   -[UIViewController setChildModalViewController:]
16  0x10291ff0  Retain  5   UIKit   -[UIApplication _addViewControllerForLockingStatusBarTintColor:]
17  0x10291ff0  Retain  6   UIKit   -[UINib instantiateWithOwner:options:]
18  0x10291ff0  Retain  7   UIKit   +[UIProxyObject addMappingFromIdentifier:toObject:forCoder:]
19  0x10291ff0  Retain  8   UIKit   -[UINib instantiateWithOwner:options:]
20  0x10291ff0  Retain  9   UIKit   +[UIProxyObject addMappingFromIdentifier:toObject:forCoder:]
21  0x10291ff0  Retain  10  UIKit   -[UIProxyObject initWithCoder:]
22  0x10291ff0  Retain  11  UIKit   -[UIRuntimeConnection initWithCoder:]
23  0x10291ff0  Retain  12  UIKit   -[UIRuntimeConnection initWithCoder:]
24  0x10291ff0  Retain  13  UIKit   -[UIRuntimeConnection initWithCoder:]
25  0x10291ff0  Retain  14  UIKit   -[UIRuntimeConnection initWithCoder:]
26  0x10291ff0  Retain  15  UIKit   -[UIRuntimeConnection initWithCoder:]
27  0x10291ff0  Retain  16  UIKit   -[UIRuntimeConnection initWithCoder:]
28  0x10291ff0  Retain  17  UIKit   -[UIRuntimeConnection initWithCoder:]
29  0x10291ff0  Retain  18  UIKit   -[UIRuntimeConnection initWithCoder:]
30  0x10291ff0  Retain  19  UIKit   -[UIRuntimeConnection initWithCoder:]
31  0x10291ff0  Retain  20  UIKit   -[UIRuntimeConnection initWithCoder:]
32  0x10291ff0  Retain  21  UIKit   -[UIRuntimeConnection initWithCoder:]
33  0x10291ff0  Retain  22  UIKit   -[UIRuntimeConnection initWithCoder:]
34  0x10291ff0  Retain  23  UIKit   -[UIRuntimeConnection initWithCoder:]
35  0x10291ff0  Retain  24  UIKit   -[UIRuntimeConnection initWithCoder:]
36  0x10291ff0  Retain  25  UIKit   -[UIRuntimeConnection initWithCoder:]
37  0x10291ff0  Retain  26  UIKit   -[UIRuntimeConnection initWithCoder:]
38  0x10291ff0  Retain  27  UIKit   -[UIProxyObject initWithCoder:]
39  0x10291ff0  Retain  28  UIKit   -[UIRuntimeConnection initWithCoder:]
40  0x10291ff0  Retain  29  UIKit   -[UIRuntimeConnection initWithCoder:]
41  0x10291ff0  Retain  30  UIKit   UINibDecoderDecodeObjectForValue
42  0x10291ff0  Retain  31  UIKit   UINibDecoderDecodeObjectForValue
43  0x10291ff0  Retain  32  UIKit   UINibDecoderDecodeObjectForValue
44  0x10291ff0  Retain  33  UIKit   UINibDecoderDecodeObjectForValue
45  0x10291ff0  Release 32  UIKit   -[UINib instantiateWithOwner:options:]
46  0x10291ff0  Release 31  UIKit   +[UIProxyObject removeMappingsForCoder:]
47  0x10291ff0  Release 30  UIKit   +[UIProxyObject removeMappingsForCoder:]
48  0x10291ff0  Release 29  UIKit   -[UINibDecoder finishDecoding]
49  0x10291ff0  Release 28  UIKit   -[UINibDecoder finishDecoding]
50  0x10291ff0  Release 27  UIKit   -[UINibDecoder finishDecoding]
51  0x10291ff0  Release 26  UIKit   -[UINibDecoder finishDecoding]
52  0x10291ff0  Release 25  UIKit   -[UINibDecoder finishDecoding]
53  0x10291ff0  Release 24  UIKit   -[UINibDecoder finishDecoding]
54  0x10291ff0  Release 23  UIKit   -[UIRuntimeConnection dealloc]
55  0x10291ff0  Release 22  UIKit   -[UIRuntimeConnection dealloc]
56  0x10291ff0  Release 21  UIKit   -[UIRuntimeConnection dealloc]
57  0x10291ff0  Release 20  UIKit   -[UIRuntimeConnection dealloc]
58  0x10291ff0  Release 19  UIKit   -[UIRuntimeConnection dealloc]
59  0x10291ff0  Release 18  UIKit   -[UIRuntimeConnection dealloc]
60  0x10291ff0  Release 17  UIKit   -[UIRuntimeConnection dealloc]
61  0x10291ff0  Release 16  UIKit   -[UIRuntimeConnection dealloc]
62  0x10291ff0  Release 15  UIKit   -[UIRuntimeConnection dealloc]
63  0x10291ff0  Release 14  UIKit   -[UIRuntimeConnection dealloc]
64  0x10291ff0  Release 13  UIKit   -[UIRuntimeConnection dealloc]
65  0x10291ff0  Release 12  UIKit   -[UIRuntimeConnection dealloc]
66  0x10291ff0  Release 11  UIKit   -[UIRuntimeConnection dealloc]
67  0x10291ff0  Release 10  UIKit   -[UIRuntimeConnection dealloc]
68  0x10291ff0  Release 9   UIKit   -[UIRuntimeConnection dealloc]
69  0x10291ff0  Release 8   UIKit   -[UIRuntimeConnection dealloc]
70  0x10291ff0  Release 7   UIKit   -[UIRuntimeConnection dealloc]
71  0x10291ff0  Release 6   UIKit   -[UIRuntimeConnection dealloc]
72  0x10291ff0  Release 5   Foundation  -[NSAutoreleasePool drain]
73  0x10291ff0  Retain  6   MyApp   -[SSPullToRefreshView initWithScrollView:delegate:]
74  0x10291ff0  Release 5   MyApp   -[SSPullToRefreshView initWithScrollView:delegate:]
75  0x10291ff0  Retain  6   UIKit   -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:]
76  0x10291ff0  Retain  7   libsystem_sim_blocks.dylib  _Block_object_assign
77  0x10291ff0  Retain  8   libsystem_sim_blocks.dylib  _Block_object_assign
78  0x10291ff0  Release 7   Foundation  __NSFireDelayedPerform
79  0x10291ff0  Release 6   UIKit   -[UIStoryboardSegue dealloc]
80  0x10291ff0  Release 5   Foundation  __NSFireDelayedPerform
81  0x10291ff0  Release 4   UIKit   -[UIStoryboardScene dealloc]
82  0x10291ff0  Retain  5   UIKit   __91-[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:]_block_invoke_0238
83  0x10291ff0  Release 4   UIKit   __destroy_helper_block_250
84  0x10291ff0  Release 3   MyApp   __destroy_helper_block_
85  0x10291ff0  Release 2   UIKit   -[UIWindowController transitionViewDidComplete:fromView:toView:removeFromView:]
86  0x10291ff0  Retain  3   UIKit   -[UIViewController _dismissViewControllerWithTransition:from:completion:]
87  0x10291ff0  Retain  4   UIKit   __91-[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:]_block_invoke_0238
88  0x10291ff0  Retain  5   UIKit   -[UIViewController _didFinishDismissTransition]
89  0x10291ff0  Retain  6   UIKit   -[UIApplication _removeViewControllerForLockingStatusBarTintColor:]
90  0x10291ff0  Release 5   UIKit   -[UIApplication _removeViewControllerForLockingStatusBarTintColor:]
91  0x10291ff0  Release 4   UIKit   -[UIApplication _removeViewControllerForLockingStatusBarTintColor:]
92  0x10291ff0  Release 3   UIKit   -[UIViewController setChildModalViewController:]
93  0x10291ff0  Release 2   UIKit   -[UIViewController _didFinishDismissTransition]
94  0x10291ff0  Release 1   UIKit   -[UIWindowController transitionViewDidComplete:fromView:toView:removeFromView:]
95  0x10291ff0  Release 0   UIKit   -[UIViewController _dismissViewControllerWithTransition:from:completion:]
96  0x10291ff0  Zombie  -1  UIKit   -[UIScrollView(UIScrollViewInternal) _delegateScrollViewAnimationEnded]

- 编辑 -

以下是我如何使用AFNetworking在我的应用的每个页面上检索数据:

[[APIClient sharedClient] getPath:request
                            parameters:params
                               success:^(AFHTTPRequestOperation *operation, id responseObject) {
                                   [SVProgressHUD dismiss];
                                   [self.pullToRefreshView finishLoading];

                                   ... read data ...                                       

                               } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                   [SVProgressHUD showErrorWithStatus:error.localizedDescription];
                               }];

没有will / didUnload方法,只有这一个:

- (void)viewWillDisappear:(BOOL)animated{
    [SVProgressHUD dismiss];
    [_pubnub unsubscribeFromChannel: self.pro.channel];
}

1 个答案:

答案 0 :(得分:0)

我认为这是因为AFNetworking委托方法。 您可能会使用AFNetworking委托方法从后端获取内容。 释放CustomViewController时,您可以清除它的委托。 因此,请将以下代码snap添加到CustomViewContoller的dealloc方法。

- (void)dealloc
{
    ...
    networkingInstance.delegate = nil;
    [super dealloc];
}