/ / Як працює aloc в Цілі C? - об'єктивна-с

Як розподіляється робота в цілі С? - об'єктивно-с

Я знаю, що аллок - це метод класу, який створює об'єкт класу і вказує його "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

Я сподіваюся, що це допоможе багатьом, хто прибув сюди :)