检查 ObjC 属性 在运行时是否可为空

Checking whether an ObjC property is nullable at runtime

我试图在运行时弄清楚 class 的 属性 是否可以为 null。例如:

@interface A : NSObject

+ (NSSet<NSString *> *)nullableProperties;

@property (readonly, nonatomic) NSString *description;

@property (readonly, nonatomic, nullable) NSError *error;

@end

@implementation A

+ (NSSet<NSString *> *)nullableProperties {
  // Code that identifies nullable properties.
}

@end

nullableProperties 在这种情况下应该 return 一个 NSSet@"error".

property_getAttributes函数可以提供一些属性的信息(更多信息here)。不幸的是,它没有提供有关 属性 是否声明为可空的信息。

我想避免为每个 class 实现 nullableProperties,我需要知道其可空属性。

每个 Objective-C 指针或对象 属性 在运行时技术上都可以为空。可空性说明符只是编译器提示,不会影响实际生成的二进制文件由编译器和链接器生成的格式,其中包含表示程序逻辑的机器指令以及其他信息和元数据]。因此,无法在运行时检测哪些属性可以为空,哪些不能。