DevPrep

Все темы › Objective-C

nil, Nil, NULL, NSNull

Middle PRO

Четыре «ничего»

Первые три — нулевые указатели, различающиеся только типом и соглашением об использовании; четвёртое — настоящий объект.

#import <Foundation/Foundation.h>

static void demo(void) {
    id obj = nil;
    Class cls = Nil;
    char *cstr = NULL;
    NSArray *row = @[@"Ann", [NSNull null], @42];
    for (id value in row) {
        if (value == [NSNull null]) {   // синглтон — сравнение указателей
            NSLog(@"missing");
        }
    }
    NSLog(@"%@ %@ %s", obj, cls, cstr ? cstr : "");
}

Ловушка: [NSNull null] — живой объект, и [[NSNull null] length] — краш «unrecognized selector», а не 0, как было бы с nil. Поэтому значения из JSON нужно проверять на NSNull, а не на nil.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store