您可以使用 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 仍然是 Foundation 的一部分。