gpt4 book ai didi

objective-c - NSObject 类现在是 Objective-C 运行时库的一部分(而不是 Foundation 组件)吗?

转载 作者:太空狗 更新时间:2023-10-30 03:48:57 25 4
gpt4 key购买 nike

查看the Mac OS X 10.8's version of the Objective-C runtime library source code ,我注意到它有一个 NSObject.mm文件。顾名思义,它有 NSObject 类实现,以及内置的自动释放池和保留计数实现。

但是,在 Mountain Lion 之前的 ObjC 运行库版本没有实现 NSObject 类(它们没有 NSObject.mm 文件,因为例如,您可以在 Mac OS X 10.7's Objective-C runtime library source code 处看到)。

那么这真的意味着 NSObject 类现在是 Objective-C 运行时库的一部分,而不是 Foundation 库组件吗?如果是,为什么?是否在子类化 NSObject 时避免对整个 Foundation 库(使用 -framework Foundation)进行链接?

最佳答案

您可以使用 nm(1) 工具查看任何特定库的组成部分。

如果你在 libobjc 上运行它,你会发现 NSObject 实际上是由 libobjc 提供的:

% nm /usr/lib/libobjc.dylib | grep -F NSObject

0000000000021688 t +[NSObject _isDeallocating]
0000000000021674 t +[NSObject _tryRetain]
0000000000021780 t +[NSObject allocWithZone:]
000000000002176e t +[NSObject alloc]
0000000000021699 t +[NSObject allowsWeakReference]
0000000000021712 t +[NSObject autorelease]
0000000000020fa6 t +[NSObject class]
000000000002115a t +[NSObject conformsToProtocol:]
00000000000217ea t +[NSObject copyWithZone:]
00000000000217e6 t +[NSObject copy]
000000000002178d t +[NSObject dealloc]

(“t”表示该符号由本库提供;“u”表示该符号未定义,表示本库使用它,但它必须来自其他地方。)

这不是他们第一次移动 NSObject 的实现;在 Lion 中,您会在 CoreFoundation.framework 中找到它。

我不知道他们为什么要移动它。无论如何,这是一个实现细节; 官方NSObject is still part of Foundation .

关于objective-c - NSObject 类现在是 Objective-C 运行时库的一部分(而不是 Foundation 组件)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456974/

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