Objective-C 运行时中类似 IBOutlet 的构造

tea*_*bot 2 objective-c objective-c-runtime

我对 IBOutlets 的理解是它们充当了 Objective-C 类中的变量和属性的标记。Objective-C 运行时中是否有任何内容可以让人们在运行时查询 ivar 或属性或类是否已用 IBOutlet 标记?或者 XCode 只是在编译时对这些做了一些聪明的事情?

如果它们是运行时构造,是否可以定义自己的标记并以这种方式使用它们:

@private
    MyMarker MyClass instance;
Run Code Online (Sandbox Code Playgroud)

Pet*_*wis 5

我的理解是 Interface Builder 只是读取头文件。IBOutlet 和 IBAction 是微不足道的#defines:

#define IBOutlet
#define IBAction void
Run Code Online (Sandbox Code Playgroud)

根本不影响编译。Interface Builder 直接读取您的头文件(当头文件更改时Xcode通知它,但它只是读取和解析头文件本身。

当 nib 文件被清除时,值是通过普通接口使用 ivar 或属性设置的,但没有特别注意 ivar/属性可被 Interface Builder 使用。

所以不,IBOutlet/IBAction 属性的存在没有被存储和访问,也不能添加自己的属性。

您可以查看属性,看看是否有任何有用的东西可以通过属性附加到 ivar,但我会感到非常惊讶。