Skip to content

iOS objc4

Deepin edited this page Aug 26, 2021 · 1 revision

:对于oc的底层源码分析,避不可免要要涉及到oc的源码。单独将这篇文章抽出来,以便在其他文章中可以复用,这算不算深刻理解了oc的思想呢^_^

Q:如果我们想查询Objective-C的源码,要怎么办呢?

A:可以通过Apple Open Source, 最简单的办法,还是直接下载objc4

打开下载后objc4代码,可以找到结构如下:

  • objc
    • Public Headers
      • NSObjCRuntime.h
      • NSObject.h
      • message.h
      • objc-api.h
      • objc-auto.h
      • objc-exception.h
      • objc-sync.h
      • objc.h
      • runtime.h
    • Private Headers
      • objc-internal.h
      • objc-abi.h
      • maptable.h
      • objc-gdb.h
    • Project Headers
      • objc-config.h
      • objc-file.h
      • objc-file-old.h
      • objc-initialize.h
      • objc-loadmethod.h
      • objc-os.h
      • objc-private.h
      • objc-references.h
      • objc-runtime-new.h
      • objc-runtime-old.h
      • objc-sel-set.h
      • objc-weak.h
    • Obsolete Headers - 废弃的就不列了
    • Obsolete Source - 废弃的就不列了
    • Source - 只挑部分列出来
      • hashtable2.mm
      • maptable.mm
      • NSObject.mm
      • Protocol.mm
      • objc-accessors.mm
      • objc-auto.mm
      • objc-block-trampolines.mm
      • objc-cache.mm
      • objc-cache-old.mm
      • objc-class-old.mm
      • objc-class.mm
      • objc-errors.mm
      • objc-exception.mm
      • objc-file.mm
      • objc-file-old.mm
      • objc-initialize.mm
      • objc-layout.mm
      • objc-load.mm
      • objc-loadmethod.mm
      • objc-lockdebug.mm
      • objc-opt.mm
      • objc-os.mm
      • objc-references.mm
      • objc-runtime-new.mm
      • objc-runtime-old.mm
      • objc-runtime.mm
      • objc-sel-set.mm
      • objc-sel-table.s
      • objc-sel.mm
      • objc-sel-old.mm
      • objc-sync.mm
      • objc-typeencoding.mm
      • 剩下一些*.s & *.d文件不列

可以看到,Public Headers里面正好是我们之前苹果公开的头文化,Private Headers以及Project Headers也是头文件只是没有公开,Obsolete HeadersObsolete Source已经废弃,就不看到,主要看Source里面,其中message.mm、NSObject.mm、objc.mm、runtime.mm等文件是最最常见的.

很多涉及源码的分析,都需要通过这个方式来查看。

Clone this wiki locally