Objective-C вопросы на уровень middle/senior

Что должен знать objc разработчик на уровень middle/senior?
К сожалению, четкой черты на вертикальное развитие нет. Парадокс, но чтобы знать что изучить, нужно знать что ты не знаешь.
Я постарался вспомнить самые интересные вопросы, которые мне задавали самому на различных собеседованиях, а так же расширил их множеством вопросов (тем же уровнем) от себя.
Здесь нет общих вопросов вроде: IoC, design patterns, S.O. L.I.D. и т.п.

ВНИМАНИЕ!!!
Помимо вертикального развития немаловажно и горизонтальное

ВНИМАНИЕ!!! (2)
Не пишите в комментарии ответы на вопросы, это дает возможность людям самостоятельно разобраться.
Однако, если у вас имеются интересные вопросы по теме, я с радостью добавлю их в список.

Конечно, это не заменит живого общения, однако позволит неплохо подготовиться к собеседованиям.


что такое void *?
а что означает просто void?

в чем разница между void * и id?

что такое id?
как определен id?
можно ли создать структуру и привести к id?

id vs instancetype

что значит root класс?
можно ли создать свой root класс?
какие есть еще root классы кроме NSObject и NSProxy?

можно ли использовать NSObject вместо NSProxy?
если ответ «да», то зачем тогда нужен NSProxy?

как происходит выравнивание указателей на объекты в objc?
с чем это связано?
какие оптимизации с этим связаны при хранении данных?
почему нельзя делать свою реализацию?

что такое bridge и зачем это нужно?

все эти методы допустимы? если нет то какие и почему?
- (instancetype)initMyObj {
    self = nil;
    return self;
}

- (instancetype)initmyObj {
    self = nil;
    return self;
}

- (instancetype)myObj {
    self = nil;
    return self;
}



что такое мета-класс?

objc_msgSend, что это за функция?
как это связано с [obj foo]? какие еще есть связанные функции?

что такое dispatch table?

как происходит отправка сообщения?
всегда ли сообщения отправляются с одинаковой скоростью?

что будет если метод не найден в dispatch table?

есть ли в objc приватные методы?
как протестировать метод, не объявленный в публичном интерфейсе

exception отправки сообщения, кто выбрасывает?
что такое NSInvocation. Привести пример использования

что такое swizzling?

можно ли сделать private ivar как property, через категорию?
какие проблемы могут быть?
как в категории сделать свою property?

target-action, передается селектор, как сделать так, чтобы по селектору был вызван не метод, а блок?

что такое селектор?

что такое блок?
какие типы блоков бывают?
от какого класса наследуются?

всегда ли использование self внутри блока означает retain cycle?

почему внутри блока используется неявное const?

как работает __block?

как происходит вызов блока?

внутри блока используется assert, какие проблемы возникают?
как их устранить без выделения в отдельный метод?

что такое assert и когда использовать?

что такое __autoreleasing?

что такое autorelease pool?

что такое run loop?

как связаны NSTimer и run loop?
как запустить таймер на отдельном потоке?
что будет если запустить таймер и держать UIScrollView?
как это исправить?

как связаны run loop и autorelease pool?

почему в этом коде утечка памяти и как устранить?
        NSString *str;
        while (YES) {
            str = [NSString stringWithFormat:@"hello world"];
        }


какие типы управления памятью есть в objc?

garbage collection vs reference counting?

отличия ARC от MRC?
как работает ARC? магически определяет когда удалять объект?
напишите реализацию сеттера на MRC

чем отличается weak от strong и почему так много runtime функций для этого?

почему weak невозможно использовать на некоторых классах?
на каких именно?
как быть в этом случае?

ARC, как работает dealloc?
когда расставляются release сообщения для ivar?

причина выполнения true ветки? причина выполнения false ветки? от чего зависит результат?
        BOOL b = 1024;
        if (b) {
            NSLog(@"true");
        } else {
            NSLog(@"false");
        }


одинаковую ли память занимают эти структуры и почему так?
struct StructA {
    int32_t a;
    char b;
    char c;
};

struct StructB {
    char b;
    int32_t a;
    char c;
};


что такое union?

а сколько памяти занимают эти структура и что это вообще такое?
struct Value1 {
    int32_t foo:12;
    int32_t foo1:4;
    int32_t foo2:6;
    int32_t foo3:10;
};

struct Value2 {
    int32_t foo;
    int32_t foo1;
    int32_t foo2;
    int32_t foo3;
};



что такое volatile?

что такое inline функции?

в чем отличие потока от процесса?

NSThread vs pthread

сокет, как это связано с вопросами выше?
tcp, udp когда что применять?

гонка потоков, методы синхронизации, защита критической секции, семафор, мьютекс, барьер, что это и зачем нужно?
что такое OSSpinLock?

как передавать данные между NSOperation?
когда операция отправленная в NSOperationQueue начинает выполняться, можно ли отложить выполнение?

как тестировать асинхронные методы?
как написать синхронную обертку для асинхронного метода?

что такое стек вызовов и как это работает?
в чем отличие стека от кучи?
int8_t matrix[2048][2024], допустимо ли?

рекурсивные функции и хвостовая рекурсия, любая ли рекурсия может быть хвостовой?

что происходит со счетчиком ссылок когда объект добавляется в array, dictionary, set?
если нужно другое поведение, что использовать?
можно ли узнать, какой объект сколько раз был добавлен в set? (bag)

как использовать свой класс как ключ?

в чем плюсы использования immutable?
в чем минусы?
зачем нужен атрибут copy для property и какую проблему решает?

почему и как работает KVC?
key-path, хаки для коллекций

зачем нужен NSMapTable, какие отличия от NSHashTable

проблемы при работе с KVO и как это все работает

frame, bounds, center, как все это между собой связано?
как изменятся свойства, если применить поворот на 45º?
как передвинуть все subviews на 3 pt вверх и влево?

отличие view от layer?

responder принцип работы
как отправить сообщение по responder chain?

как работают категории?
в какой момент происходит влияние на классы?
что будет если категории пересекутся?
зачем у категории есть имя?

зачем нужен NSCache? В чем от реализации кэша на NSDictionary?
поддерживает ли NSURLConnection протокол HTTP/2?

какая типизация у objc? Сильная/слабая, явная/не явная, статическая/динамическая?
в чем отличие QoS User-interactive и user-initiated?
в чем отличие nil/Nil/NULL/NSNull?
________

Еще раз, не пишите ответы на вопросы в комментариях. Статья не для того, чтобы люди просто прочитали вопрос-ответ, а нашли ответ самостоятельно и попутно разобрались.

Статья написана совместно с complexityclass

© Habrahabr.ru