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]应始终在方法的最后.执行该行后,您无法执行任何有意义的操作.
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |