我之前发布了几个问题,试图弄清楚为什么我会得到 EXC_BAD_ACCESS,并且我已经做了一些调试
请参阅此处: 帮助调试 iPhone 应用程序 - EXC_BAD_ACCESS
和:
所以,我想我已经发现了发生了什么。
从我的日志中,我得到了这个:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000f
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x00003ebc objc_msgSend + 20
1 MyApp 0x0000378a -[PictureView clearPage] (PictureView.m:79)
起初我认为问题是在“clearPage”函数中发送消息的已释放对象,但是自从与朋友交谈后,我被引导相信 PictureView 对象本身可能已经被释放。
我的日志输出证实了这一点:
Fri Jan 8 20:28:32 unknown MyApp[2224] <Warning>: Picture View Unloaded
Fri Jan 8 20:28:32 unknown MyApp[2224] <Warning>: Memory warning from Picture view
Fri Jan 8 20:28:34 unknown MyApp[2224] <Warning>: Scaling image
Fri Jan 8 20:28:36 unknown MyApp[2224] <Warning>: Attempting to save image to disk
Fri Jan 8 20:28:37 unknown MyApp[2224] <Warning>: Saved file to: /var/mobile/Applications/065C0D37-95C1-41D4-98F0-16A3555682CD/Documents/MyImage1.jpg
Fri Jan 8 20:28:37 unknown MyApp[2224] <Warning>: Clearing page
Fri Jan 8 20:28:40 unknown ReportCrash[2225] <Notice>: Formulating crash report for process MyApp[2224]
Fri Jan 8 20:28:41 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.yourcompany.MyApp[0xb8e1]) Job appears to have crashed: Bus error
所以,我的猜测是我正在使用的视图在收到由图像选择器引起的内存警告后被卸载......
我的问题是,我怎样才能阻止这种情况发生?我显然需要调用 PictureView 的 clearPage 方法,但如果它被卸载我就不能。