gpt4 book ai didi

objective-c - 重新加载先前卸载的 bundle 时 KVO/KVC 崩溃

转载 作者:行者123 更新时间:2023-12-03 16:43:36 25 4
gpt4 key购买 nike

我遇到了可加载包和 KVO 的问题。似乎任何具有 KVO 观察者附加到其实例的类都无法通过 NSBundle 的 -unload 方法安全地卸载。

我正在执行以下操作:

for (int i = 0; i < 100; i++)
{
[bundle load];

Class bundleClass = [bundle principalClass];

[[[bundleClass alloc] init] release];

[bundle unload];
}

并且在bundle的原理类-init方法中,

    [self addObserver: self 
forKeyPath: @"name"
options: 0
context: nil];

self.name = @"jim";

循环经过多次迭代,有时在第二轮崩溃,有时在第三十轮崩溃。

它总是因这个回溯和 EXC_BAD_ACCESS 信号而崩溃。

#0  0x00007fff8a30deab in objc_msgSend ()
#1 0x00007fff8609d862 in NSKeyValueNotifyObserver ()
#2 0x00007fff860be99b in NSKeyValueDidChange ()
#3 0x00007fff8606b0fb in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] ()
#4 0x00000001007a4c2c in -[Bundle init] (self=0x101902130, _cmd=0x7fff8ea369b0) at /Users/joerick/Desktop/bundleTest/testbundle/Bundle.m:26
#5 0x0000000100001731 in -[SIAppDelegate applicationDidFinishLaunching:] (self=0x100326a90, _cmd=0x7fff876e285f, aNotification=0x100131ea0) at /Users/joerick/Desktop/bundleTest/bundleTest/SIAppDelegate.m:28
#6 0x00007fff8606ade2 in __-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_1 ()
#7 0x00007fff8b470e0a in _CFXNotificationPost ()
#8 0x00007fff86057097 in -[NSNotificationCenter postNotificationName:object:userInfo:] ()
#9 0x00007fff8e1bbaa7 in -[NSApplication _postDidFinishNotification] ()
#10 0x00007fff8e1bb80d in -[NSApplication _sendFinishLaunchingNotification] ()
....

Full code here

您可以下载显示此问题的示例项目 here .

我认为这是 Cocoa 中的一个错误,但我想知道是否有人可以看到我在这里做了什么愚蠢的事情?

最佳答案

我已向 Apple 报告了此情况。

rdar://11017946

关于objective-c - 重新加载先前卸载的 bundle 时 KVO/KVC 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240569/

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