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

标签 objective-c objective-c-runtime

我对 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/

相关文章:

ios - 更新大量 NSManagedObject 的有效方法

iphone - 有关 typedef 枚举的帮助

objective-c - 在 Modern Runtime 中使用实例变量

Objective-C 属性赋值返回赋值?

.net - Objective C 真的编译了吗?它不是更像 Visual Basic/.NET 运行时吗?那么是什么阻止它移植到其他平台呢?

objective-c - 为什么 Objective-C 编译器需要知道方法签名?

iphone - 如何动态添加iPhone图像的透明度?

ios - Swift 3 - 使用 UnsafePointer<CFDictionary>?

iphone - 使用 native Trigger.IO API 将 UIImage 传递给 JS

ios - swift:等效的 objective-c 运行时类