gpt4 book ai didi

objective-c - 如何确定哪个 NSNotification 由于 dealloc-ed 观察者而崩溃

转载 作者:太空狗 更新时间:2023-10-30 03:26:35 29 4
gpt4 key购买 nike

使用NSNotification的黄金法则似乎是

"call removeObserver before the observer (or the object) is deallocated".

我正在处理未遵循此规则的代码库,但我找不到违规行为。我搜索了代码并确保每个 addObserver 都有匹配的 removeObserver 但我仍然看到以下各种崩溃报告:

OS Version:      iPhone OS 5.0.1 (9A405)
Report Version: 104

Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x8
Crashed Thread: 0

Thread 0 Crashed:
0 libobjc.A.dylib 0x31516fbc objc_msgSend + 16
1 Foundation 0x3195b50f __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_0 + 19
2 CoreFoundation 0x37a02577 ___CFXNotificationPost_block_invoke_0 + 71
3 CoreFoundation 0x3798e0cf _CFXNotificationPost + 1407
4 Foundation 0x318cf3fb -[NSNotificationCenter postNotificationName:object:userInfo:] + 67
5 UIKit 0x34e5ee25 -[UIApplication _handleApplicationSuspend:eventInfo:] + 697
6 UIKit 0x34deed17 -[UIApplication handleEvent:withNewEvent:] + 2031
7 UIKit 0x34dee3bf -[UIApplication sendEvent:] + 55
8 UIKit 0x34dedd2d _UIApplicationHandleEvent + 5809
9 GraphicsServices 0x3750bdf3 PurpleEventCallback + 883
10 CoreFoundation 0x37a0a553 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 39
11 CoreFoundation 0x37a0a4f5 __CFRunLoopDoSource1 + 141
12 CoreFoundation 0x37a09343 __CFRunLoopRun + 1371
13 CoreFoundation 0x3798c4dd CFRunLoopRunSpecific + 301
14 CoreFoundation 0x3798c3a5 CFRunLoopRunInMode + 105
15 GraphicsServices 0x3750afcd GSEventRunModal + 157
16 UIKit 0x34e1c743 UIApplicationMain + 1091
17 App 0x00002d2f main (main.m:14)

我对这个崩溃报告的解释是,[UIApplication _handleApplicationSuspend:eventInfo:] 发布了一个通知,观察者在被删除之前已经被释放。

假设这种解释是正确的,我将如何确定发布的通知?理想情况下,释放的对象类型是什么?

最佳答案

你可以在 -[NSNotificationCenter postNotificationName:object:userInfo:] 中设置一个符号断点并打印传递给它的第三个参数(第一个是 NSNotificationCenter,第二,_cmd) 使用调试器 po 命令。

关于objective-c - 如何确定哪个 NSNotification 由于 dealloc-ed 观察者而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9347789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com