MKMapView-Autorelease ruft nach dem Aufrufen von UIViewController nicht Dealloc auf

Ich habe den folgenden Code in Klasse A:

UIViewController *vc = [self viewControllerForItem:item];

wobei die viewControllerForItem-Methode in meinem App-Delegaten einen UIViewController basierend auf meinem Element zurückgibt, d. h.

vc = [[[MyCustomViewController alloc] init] autorelease];

return vc;

Ich drücke dann den View Controller:

[self.navigationController pushViewController:vc animated:YES];

Diese VC, die ich zu pushen versuche, ist eine MKMapView und ich habe eine Log-Anweisung in die Dealloc-Methode eingefügt, um zu sehen, ob sie aufgerufen wird. In meinem Gedächtnis nimmt das Wachstum ziemlich schnell zu.

Wenn ich jedoch nach dem Drücken der VC den folgenden Code hinzufüge:

[vc release];

Meine MKMapView-Klasse ruft die Dealloc-Methode auf.

Dies wäre natürlich eine einfache Lösung, wenn die MKMapView-Klasse die einzige Klasse wäre, die von meinem App-Delegaten zurückgegeben wurde (oder ich könnte einfach überprüfen, ob die Klasse des VC meine MKMapView-Klasse ist). Das Grundproblem möchte ich jedoch lösen.

Warum wird die Freigabe nicht aufgerufen, wenn ich die automatische Freigabe auf meinem View-Controller festgelegt habe?

Wie ist es möglich, dass ich [vc release] zum View-Controller hinzufügen kann, obwohl auf diesem vc die Autorelease-Funktion verwendet wird?

Vielen Dank

Bearbeiten:

Hier sind einige zusätzliche Informationen. Ich habe die viewControllerForItem-Klasse in meinem App-Delegaten. Ich bringe das automatisch freigegebene Objekt in meine andere Managerklasse zurück, wo ich dann den View-Controller drücke. Wird die Anzahl der Aufbewahrungen durcheinander gebracht, wenn ich ein automatisch freigegebenes Objekt zurückgebe und es dann in eine andere Klasse weitergebe?

Dies ist der Backtrace / Callstack, wenn ich den VC drücke und wenn der didDissappear des mkmapview aufgerufen wird:

pushVC: (
0   NewHampshire                        0x00254cdf -[CustomViewController navigateToRowId:withLinkBehavior:animated:] + 2111
1   NewHampshire                        0x002534c9 -[CustomViewController webView:shouldStartLoadWithRequest:navigationType:] + 841
2   UIKit                               0x02caf288 -[UIWebView webView:decidePolicyForNavigationAction:request:frame:decisionListener:] + 318
3   UIKit                               0x02cb1854 -[UIWebViewWebViewDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:] + 77
4   CoreFoundation                      0x05d0bd1d __invoking___ + 29
5   CoreFoundation                      0x05d0bc2a -[NSInvocation invoke] + 362
6   CoreFoundation                      0x05d0bdaa -[NSInvocation invokeWithTarget:] +     74
7   WebKit                              0x0a4d811d -[_WebSafeForwarder forwardInvocation:] + 157
8   CoreFoundation                      0x05d076da ___forwarding___ + 458
9   CoreFoundation                      0x05d074ee _CF_forwarding_prep_0 + 14
10  CoreFoundation                      0x05d0bd1d __invoking___ + 29
11  CoreFoundation                      0x05d0bc2a -[NSInvocation invoke] + 362
12  WebCore                             0x09533b29 _ZL20HandleDelegateSourcePv + 121
13  CoreFoundation                      0x05ca083f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
14  CoreFoundation                      0x05ca01cb __CFRunLoopDoSources0 + 235
15  CoreFoundation                      0x05cbd29e __CFRunLoopRun + 910
16  CoreFoundation                      0x05cbcac3 CFRunLoopRunSpecific + 467
17  CoreFoundation                      0x05cbc8db CFRunLoopRunInMode + 123
18  GraphicsServices                    0x059749e2 GSEventRunModal + 192
19  GraphicsServices                    0x05974809 GSEventRun + 104
20  UIKit                               0x02a6ed3b UIApplicationMain + 1225
21  NewHampshire                        0x000150dd main + 125
22  libdyld.dylib                       0x04fab70d start + 1
)

disappear: (
0   NewHampshire                        0x0014631d -[CustomAdvancedGPSMapViewController viewDidDisappear:] + 173
1   UIKit                               0x02b85bac -[UIViewController _setViewAppearState:isAnimating:] + 341
2   UIKit                               0x02b86328 -[UIViewController __viewDidDisappear:] + 150
3   UIKit                               0x02b86461 -[UIViewController _endAppearanceTransition:] + 306
4   UIKit                               0x02ba549a -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 738
5   UIKit                               0x02b9d403 __49-[UINavigationController _startCustomTransition:]_block_invoke + 206
6   UIKit                               0x03176740 -[_UIViewControllerTransitionContext completeTransition:] + 99
7   UIKit                               0x02a63454 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke105 + 680
8   UIKit                               0x02ad1005 -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 306
9   UIKit                               0x02abac6c -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 267
10  UIKit                               0x02abaf58 -[UIViewAnimationState animationDidStop:finished:] + 80
11  QuartzCore                          0x028b2a44 _ZN2CA5Layer23run_animation_callbacksEPv + 304
12  libdispatch.dylib                   0x04d194b0 _dispatch_client_callout + 14
13  libdispatch.dylib                   0x04d0775e _dispatch_main_queue_callback_4CF + 340
14  CoreFoundation                      0x05d7ca5e __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
15  CoreFoundation                      0x05cbd6bb __CFRunLoopRun + 1963
16  CoreFoundation                      0x05cbcac3 CFRunLoopRunSpecific + 467
17  CoreFoundation                      0x05cbc8db CFRunLoopRunInMode + 123
18  GraphicsServices                    0x059749e2 GSEventRunModal + 192
19  GraphicsServices                    0x05974809 GSEventRun + 104
20  UIKit                               0x02a6ed3b UIApplicationMain + 1225
21  NewHampshire                        0x0001507d main + 125
22  libdyld.dylib                       0x04fab70d start + 1
)

Lösung: Obwohl die Antworten in diesem Beitrag nicht die genaue Lösung für mein Problem lieferten, hat Darren mich mit dem Instrumentarium definitiv in die richtige Richtung gelenkt. Ich fand, dass der Täter ein CABasicAnimation-Objekt ist, das nicht ordnungsgemäß freigegeben wurde.

In der viewWillDisappear-Methode habe ich Folgendes für das CABasicAnimation-Objekt hinzugefügt:

self.rotationAnimation.delegate = nil;
self.rotationAnimation = nil; 

Antworten auf die Frage(2)

Ihre Antwort auf die Frage