Я знаю, що аллок - це метод класу, який створює об'єкт класу і вказує його "isa" вказівник на клас, і саме так повідомлення відображаються під час виконання.
і я маю деяке уявлення про allocWithZone та зони.
Хто-небудь може сказати мені або вказати на приємне посилання, яке пояснює: -
Як вказівник isa спрямований на правильний клас?
Скільки пам'яті виділено?
Як створюється пам'ять для членів, успадкованих від батьківського класу?
Якщо id - це typedef для objc_object *, що робитийого вказівник isa вказує, то як він тримає anyobject, тому що isa покажчик потрапить нас до таблиці відправки, в якій є селектори для методів, але чи є у них щось, що говорить нам, які члени даних повинні бути там?
Відповіді:
8 для відповіді № 1Компілятор вставляє дзвінки через objc для вас за кадром. Ви можете знайти бібліотеку у своєму включеному шляху objc/
. objc/runtime.h
буде, мабуть, найбільший інтерес. Як бонус, кілька вибраних загальних повідомлень обходять objc_msgSend
з цими вставками.
Як вказівник isa вказується на потрібний клас?
objc_constructInstance
Скільки виділено пам'яті?
class_createInstance
class_getInstanceSize
Як створюється пам'ять для членів, успадкованих від батьківського класу?
Пам'ять нульова, і isa
встановлено.
Якщо id - це typedef для objc_object *, що робитийого вказівник isa вказує, то як він тримає anyobject, тому що isa покажчик потрапить нас до диспетчерської таблиці, в якій є селектори для методів, але чи є у них щось, що говорить нам про те, які члени даних мають бути там?
Що було встановлено при ініціалізації. Об'єктні покажчики ObjC - це лише сира пам'ять. На відміну від інших мов, кастинг та перетворення написаних типів є прямим набором адреси змінної "- не існує явного просування або перетворення в пам'яті в такій конструкції:
MONDisplay * display = [NSString string];
NSLog(@"%@", display);
покажчик - це саме те саме значення, яке повертає [NSString string]
.
1 для відповіді № 2
Просто додати до дискусії, Я отримав дуже приємне посилання на одне з інших моїх подібних запитань щодо внутрішніх даних Objective-C.
http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf
Я сподіваюся, що це допоможе багатьом, хто прибув сюди :)