我对 IBOutlets 的理解是它们充当 Objective-C 类中的 ivars 和属性的标记。在 Objective-C 运行时中是否有任何允许查询在运行时是否使用 IBOutlet 标记了 ivar 或属性或类的东西?还是 XCode 只是在编译时对它们做了一些巧妙的处理?
如果它们是运行时构造,是否可以定义自己的标记并以这种方式使用它们:
@private
MyMarker MyClass instance;
最佳答案
据我了解,Interface Builder 只是读取头文件。 IBOutlet 和 IBAction 是微不足道的#defines:
#define IBOutlet
#define IBAction void
完全不影响编译。 Interface Builder 直接读取您的头文件(头文件更改时为 notified by Xcode,但它只是读取并解析头文件本身。
当 nib 文件被归档时,值是通过普通界面使用 ivar 或属性设置的,但没有什么特别的注意到 ivar/property 可由 Interface Builder 使用。
所以不,IBOutlet/IBAction 属性的存在不会被存储并且无法访问,您也不能添加自己的属性。
您可以查看属性,看看是否有任何有用的东西可以附加到具有属性的 ivar,但我会感到非常惊讶。
关于objective-c - IBOutlet 类似于 Objective-C 运行时中的构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198369/