在[super delloc]语句之前和之后释放对象的区别?

Tir*_*rth 4 iphone objective-c

我想知道在释放我的[super delloc]对象之前和释放我的对象之后有什么区别[super delloc]

例如,之前..

- (void)dealloc {
    [theAudioPlayer stop];

    [soundFilePath release];

    [theAudioPlayer release];

    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

现在释放对象后..

- (void)dealloc {

    [super dealloc];

    [theAudioPlayer stop];

    [soundFilePath release];

    [theAudioPlayer release];
}
Run Code Online (Sandbox Code Playgroud)

当我使用第一种情况时,我首先导航我的viewController第一个到第二个viewController类,然后再次来到第二个到第一个,然后它会在控制台之后给我一些错误.

#0  0x02d29c93 in objc_msgSend ()
#1  0x0628ae60 in ?? ()
#2  0x02b24814 in __CFURLDeallocate ()
#3  0x02b23ed0 in _CFRelease ()
#4  0x0012af48 in -[NSURL release] ()
#5  0x02795827 in -[AVAudioPlayer dealloc] ()
#6  0x0000480e in -[ViewController dealloc] (self=0x6285340, _cmd=0x2c0a934) at /Users/ajm/Desktop/DetectiveJone/Classes/ViewController.m:209
#7  0x02d23e9d in objc_setProperty ()
#8  0x0039f7b3 in -[UINavigationController setDisappearingViewController:] ()
#9  0x0039ce91 in -[UINavigationController _clearLastOperation] ()
#10 0x0039d732 in -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] ()
#11 0x0054d25f in -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:] ()
#12 0x0054e39e in -[UINavigationTransitionView _navigationTransitionDidStop] ()
#13 0x00325d54 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] ()
#14 0x00325be6 in -[UIViewAnimationState animationDidStop:finished:] ()
#15 0x048a1933 in run_animation_callbacks ()
#16 0x048a17da in CA::timer_callback ()
#17 0x02b497dc in CFRunLoopRunSpecific ()
#18 0x02b488a8 in CFRunLoopRunInMode ()
#19 0x0356989d in GSEventRunModal ()
#20 0x03569962 in GSEventRun ()
#21 0x00307372 in UIApplicationMain ()
#22 0x00002018 in main (argc=1, argv=0xbffff050) at /Users/ajm/Desktop/DetectiveJone/main.m:14
(gdb) 
Run Code Online (Sandbox Code Playgroud)

Chu*_*uck 10

第二种方式是绝对错误的.NSObject dealloc实际上释放了对象,并且[super dealloc]不可避免地为任何正确编写的Cocoa类实现了NSObject的实现.这意味着dealloc不再分配执行该方法的对象的内存,并且访问曾经是该对象的实例变量的内存- 甚至只是发送它们release- 是未定义的行为.

因此,[super dealloc]应始终在方法的最后.执行该行后,您无法执行任何有意义的操作.