Skip to content

iOS objc.h

Deepin edited this page Aug 25, 2021 · 15 revisions

序言

objc属于Objective-C这门语言中的一个重要文件,接下来,我们将逐步解开objc的神秘面纱。

准备工作

在xcode中打开一个任意一个objc项目,按下shift + command + O组合快捷键,

在"open quickly"搜索框中,输入objc.h, 敲下enter键,即可看到objc.h头文件的内容如下图:

关联信息

我们在顶部路径区域,操作,点击usr/include可以看到对应iOS结构如下图:

我们可以看到主结构如下:

  • Simulator - iSO 14.5
    • Frameworks
    • DeveloperFrameworks
    • usr/include

而objc.h属于usr/include目录中的其中一项,其他挑选一些常见的列举如下:

  • usr/include
    • 目录
      • architecture
      • arm
      • arm64
      • CommonCrypto
      • device
      • dispatch
      • i386
      • mach
      • mach_debug
      • mach-o
      • machine
      • malloc
      • os
      • pthread
      • secure
      • sys
      • unicode
      • uuid
      • voucher
    • 独立.h文件
      • assert.h
      • Block.h
      • cache.h
      • math.h
      • pthread.h
      • regex.h
      • stdio.h
      • sqlite3.h

等耳熟能祥的名字. 若是需要研究其他类,可以参考路径来查找对应的文件。

objc目录

objc目录结构如下:

  • objc
    • message.h
    • module.modulemap
    • NSObjCRuntime.h
    • NSObject.h
    • objc-api.h
    • objc-auto.h
    • objc-exception.h
    • objc-sync.h
    • objc.h
    • ObjectiveC.apinotes
    • runtime.h

其中message.hNSObject.hobjc.hruntime.h等文件是最最常见的,接下来我们先来看看今天的主角:objc.h

/// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class;

/// Represents an instance of a class.
struct objc_object {
    Class _Nonnull isa  OBJC_ISA_AVAILABILITY;
};

/// A pointer to an instance of a class.
typedef struct objc_object *id;
#endif

/// An opaque type that represents a method selector.
typedef struct objc_selector *SEL;

可以看出我们常用的Classobjc_class类型的结构体指针,整理几者如下:

typedef struct objc_class *Class;
typedef struct objc_object *id;
typedef struct objc_selector *SEL;

ClassidSEL分别对应三种结构体指针

以上都是objc.h头文件对外公开的信息, 若是还需要更多的信息,我们就需要查看源码了: objc4

打开下载后objc4代码,可以找到

参考链接

https://www.jianshu.com/p/ead476cdb828 https://www.jianshu.com/p/41735c66dccb

https://juejin.cn/post/6844903639094394893 https://blog.csdn.net/u014773226/article/details/54617716 https://www.jianshu.com/p/62913d6cbc40 https://juejin.cn/post/6844903633113317390 https://juejin.cn/post/6844903600968171533

https://www.jianshu.com/p/f1b2085c4179 https://www.jianshu.com/p/15071d70034e https://www.cnblogs.com/-boy/p/4065783.html https://www.baidu.com/s?wd=oc%20struct%E5%B5%8C%E5%A5%97&rsv_spt=1&rsv_iqid=0xdea253aa0000b849&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=24&rsv_sug1=14&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=8957&rsv_sug4=8957

https://www.baidu.com/s?wd=ios%20property%20syn&rsv_spt=1&rsv_iqid=0x8d5cff410001515e&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=23&rsv_sug1=16&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=12149&rsv_sug4=12149 https://www.jianshu.com/p/50e290f21ff4

https://www.baidu.com/s?wd=%E5%87%BD%E6%95%B0%E6%8C%87%E9%92%88%E4%B8%8E%E6%8C%87%E9%92%88%E5%87%BD%E6%95%B0%E7%9A%84%E5%8C%BA%E5%88%AB&rsv_spt=1&rsv_iqid=0x8a559e2000075e08&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&rsv_dl=ts_3&oq=%25E5%2587%25BD%25E6%2595%25B0%25E6%258C%2587%25E9%2592%2588&rsv_btype=t&rsv_t=2f46DaodzOoTSftFjxbBKQarQQUjNJ64Tkjukn4PR7P8GtPOg%2FTs3C%2Bed%2Fq4LiKykzXv&rsv_sug3=12&rsv_sug1=9&rsv_sug7=100&rsv_pq=d98cb0f10006ae22&rsv_sug2=1&prefixsug=%25E5%2587%25BD%25E6%2595%25B0%25E6%258C%2587%25E9%2592%2588&rsp=3&rsv_sug4=1882 http://c.biancheng.net/view/228.html https://zhidao.baidu.com/question/488037128770875652.html

https://www.baidu.com/s?wd=c%E4%B8%AD%E7%9A%84*%E4%B8%8E%26&rsv_spt=1&rsv_iqid=0xdd35cac500018998&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=9&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=8759&rsv_sug4=8759 https://zhidao.baidu.com/question/1372805343211755539.html

Clone this wiki locally