Компилятор вставляет вызовы через среду выполнения objc для вас, за кулисами. Вы можете найти библиотеку в вашем пути включения objc/
. objc/runtime.h
будет, вероятно, наибольший интерес. В качестве бонуса некоторые избранные сообщения обойдут objc_msgSend
с этими вставками.
Как указатель указывает на правильный класс?
objc_constructInstance
Сколько памяти выделено?
class_createInstance
class_getInstanceSize
Как создается память для членов, унаследованных от родительского класса?
Память обнуляется, и isa
установлено.
Если id является typedef для objc_object *, на что указывает его указатель isa, то как он хранит anyobject, потому что указатель isa приведет нас к таблице диспетчеризации, в которой есть селекторы для методов, но есть ли у них что-либо, что говорит нам, какие данные члены должны быть там?
Все, что было установлено при инициализации. Указатели объектов ObjC - это просто необработанная память. В отличие от других языков, приведение и преобразование письменных типов является прямым набором адреса переменной - в следующей конструкции нет явного продвижения или преобразования типов в памяти:
MONDisplay * display = [NSString string];
NSLog(@"%@", display);
указатель - это то же самое значение, которое возвращает [NSString string]
.