3

我试图在运行时确定一个类的属性是否可以为空。例如:

@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在这种情况下应该返回一个NSSetwith @"error"

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

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

4

1 回答 1

6

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

于 2017-08-22T14:38:55.380 回答