ios - 当系统清除内存并关闭 UIViewController 时 iOS 崩溃

标签 ios facebook uiviewcontroller crash low-memory

当由于内存不足而从内存中清除其中一个 View 时,我的应用程序崩溃了。至少这是我从崩溃日志中了解到的。它发生在许多屏幕上,但仅在打开 Facebook 对话框(使用 Facebook SDK)时发生。基本上,当我们需要呈现 Facebook 对话框(例如,让用户在 Facebook 时间线上发布某些内容)时,系统有时会出现内存不足的情况。

Date/Time: 2012-03-14 19:47:33.819 +0000
OS Version: iPhone OS 5.1 (9B176)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x30000008
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x30f2bf78 objc_msgSend + 16
1 MyApp 0x00003c0e -LTBaseViewController viewDidUnload (LTBaseViewController.m:145)
2 MyApp 0x00004ea2 -LTBaseTableViewController viewDidUnload (LTBaseTableViewController.m:90)
3 UIKit 0x33766bd8 -[UIViewController unloadViewForced:] + 244
4 UIKit 0x338ae492 -[UIViewController purgeMemoryForReason:] + 58
5 Foundation 0x3071a4f8 __57-NSNotificationCenter addObserver:selector:name:object:_block_invoke_0 + 12
6 CoreFoundation 0x30e95540 ___CFXNotificationPost_block_invoke_0 + 64
7 CoreFoundation 0x30e21090 _CFXNotificationPost + 1400
8 Foundation 0x3068e3e4 -NSNotificationCenter postNotificationName:object:userInfo: + 60
9 Foundation 0x3068fc14 -NSNotificationCenter postNotificationName:object: + 24
10 UIKit 0x3387926a -UIApplication _performMemoryWarning + 74
11 UIKit 0x33879364 -UIApplication _receivedMemoryNotification + 168
12 libdispatch.dylib 0x36a12252 _dispatch_source_invoke + 510
13 libdispatch.dylib 0x36a0fb1e _dispatch_queue_invoke$VARIANT$up + 42
14 libdispatch.dylib 0x36a0fe64 _dispatch_main_queue_callback_4CF$VARIANT$up + 152
15 CoreFoundation 0x30e9c2a6 __CFRunLoopRun + 1262
16 CoreFoundation 0x30e1f49e CFRunLoopRunSpecific + 294
17 CoreFoundation 0x30e1f366 CFRunLoopRunInMode + 98
18 GraphicsServices 0x33fb6432 GSEventRunModal + 130
19 UIKit 0x336f5e76 UIApplicationMain + 1074
20 MyApp 0x00004818 main (main.m:16)
21 MyApp 0x000023b4 0x1000 + 5044

我检查了一下,几乎没有内存泄漏,例如当测试应用程序一小时时,由于某些字符串复制库导致总内存泄漏约为 2-3Kb。所以我不相信这是由应用程序引起的。我猜想,当手机一段时间没有重新启动时,有应用程序在后台运行,并且当使用 Facebook SDK 时,内存会成为问题,系统会尝试从随机应用程序(包括我的应用程序)中恢复内存。

我的问题是,如何防止发生这种崩溃?我应该如何处理 View Controller 上的 unloadViewForced 以使应用程序在低内存条件下更加健壮?最后,我是否正确,此崩溃日志表明发生崩溃是因为系统尝试释放内存而我的应用程序未正确处理它?<​​/p>

非常感谢任何帮助。

最佳答案

最有可能发生的情况是,LTBaseViewController viewDidUnload 方法引用并可能释放的对象之一正在被双重释放。事实上,由于回溯表明崩溃发生在 LTBaseViewController.m 的第 145 行,您应该能够快速查看哪个对象是罪魁祸首。

关于ios - 当系统清除内存并关闭 UIViewController 时 iOS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768099/

相关文章:

ios - 从初始值开始 UIStepper

ios - 从第一个 ViewController 到第二个 ViewController 的图像

ios - View Controller 转换

ios - 带有 HTTP 身份验证的 NSURLRequest

ios - 代码 8 : how to change targeted device family

ios - Swift - UIPageViewController 中的 UIPinchGestureRecognizer

javascript - Facebook 登录和 Node js 服务器

Facebook 邀请好友对话框 app_non_users 过滤器似乎没有效果

java - 从 api.facebook.com 解析 json

ios - 在 View Controller 之间切换而不创建它们