#typedef и KVC в ObjC

Вы правы, вы можете сделать «git clone», есть также Heroku специальные указания для локального редактирования.

7
задан Chris Hanson 19 July 2010 в 05:16
поделиться

3 ответа

Я подозреваю, что это проблема того, как typedef взаимодействует с методом кодирования.

Я считаю, что typedef остается чистым ключевым словом C и на самом деле работает только с «типами» Objective-C обычно потому, что они реализованы как структуры.

В результате, когда вы вводите NSNumber в NSNumberBool, он отлично работает для вызовов методов (и свойств точечного синтаксиса), но (при условии, что моя теория верна), кодирование разрывов не может сказать, что NSNumberBool и NSNumber относятся к одному типу.

Мне будет интересно узнать, что скажет тот, кто лучше знает .

5
ответ дан 6 December 2019 в 19:38
поделиться

После компиляции вашего примера и выдачи на нем class-dump , похоже, typedef превращается в

struct NSNumber {
    Class _field1;
};

@interface Properties : NSObject
{
    NSNumber *prop1;
    struct NSNumber *prop2;
}

. Изменение typedef на это, похоже, работает нормально, хотя может быть, не совсем то, что вам нужно.

#define NSNumberBool NSNumber
5
ответ дан 6 December 2019 в 19:38
поделиться

Как и в ответе nall, я также пробовал дамп класса. Я нашел интересный, хотя и уродливый обходной путь. Следующий код:

typedef NSNumber* NSNumberBoolPtr;

@interface Test : NSObject {
    NSNumber *real;
    NSNumberBoolPtr poser;
}

class-dumps to:

@interface Test : NSObject
{
    NSNumber *real;
    NSNumber *poser;
}

@end

Опять же, это не совсем то, что вы хотите, но вы получите проверку времени компилятора на отсутствие смешивания NSNumbers и NSNumberBools (что, как я предполагаю, является причиной typedef в первом место).

1
ответ дан 6 December 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: