加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何确定哪些NSNotification由于取消分配的观察

发布时间:2020-12-16 05:37:40 所属栏目:百科 来源:网络整理
导读:使用NSNotification的黄金法则似乎是 “call removeObserver before the observer (or the object ) is deallocated”. 我正在处理一个没有遵循这个规则的代码库,但是我找不到这个违规.我已经通过代码搜索,并确保每个addObserver都具有匹配的removeObserver,
使用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:]中设置符号断点,并使用debugger po命令打印传递给它的第三个参数(第一个为NSNotificationCenter,第二个为_cmd).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读