gpt4 book ai didi

objective-c - 动态库可以引用 Objective-C 对象并仍然被卸载吗?

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:06 25 4
gpt4 key购买 nike

我知道,至少在 OS X 上,由于 Apple 的 Objective-C 运行时加载类的方式,不可能动态卸载包含已加载类实现的动态库。这是否适用于仅通过引用 header 了解对象但不包含任何类的方法实现的库?

为清楚起见,我想使用 Objective-C 来编写动态库,但会加载和卸载带有 ResultObject* performActionOnObject(SomeObject* object) 等签名的函数。

编辑:

为了更清楚,考虑一个像这样的函数

NSNumber* computeFactorial(NSNumber* operand){
NSUInteger n = [operand unsignedIntegerValue];
/// ... pure C loop omitted
return [NSNumber numberWithUnsignedInteger:n];
}

并假设当它被调用时自动释放池是活跃的。可以卸载吗?

最佳答案

如果客户端直接引用您的类,如果该类不在链接的二进制文件中,则会导致链接器错误。您可以在运行时加载/卸载类,但您需要通过名称(字符串)查找它们才能使用它们。在按名称查找类(class)之前,您还需要注册类(class)。

您可以将 C 函数传递给运行时调用,例如 class_addMethodmethod_exchangeImplementations,以在运行时扩展/更改您的 ObjC 类。

谷歌搜索“方法调配”将带您找到示例。

所以最终......“这取决于你如何与对象交互”。

关于objective-c - 动态库可以引用 Objective-C 对象并仍然被卸载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253843/

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