Проверить, является ли свойство язык допускает значения null во время выполнения


Я пытаюсь выяснить во время выполнения, является ли свойство класса nullable. Например:

@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 следует в этом случае вернуть NSSet с @"error".

property_getAttributes функция может предоставить информацию о некоторых атрибутах (подробнее здесь ). К сожалению, он не предоставляет информацию о том, объявляется ли свойство недействительным.

Я хотел бы избежать реализации nullableProperties для каждого класса, для которого мне нужно знать свойства nullable.

1 2

1 ответ:

Каждый указатель Objective-C или свойство объекта технически могут быть обнулены во время выполнения. Спецификаторы nullability-это просто подсказки компилятора, которые не влияют на фактический встроенный двоичный файл [edit: под которым я подразумеваю, поскольку это очевидно неясно, 1 и 0, которые записываются на диск либо в Mach-O, либо в каком-либо другом сопоставимом двоичном формате компилятором и компоновщиком и которые содержат машинные инструкции, представляющие логику программы наряду с другой информацией и метаданными]. Следовательно, нет способа определить во время выполнения, какие свойства могут быть обнулены, а какие нет.