/ / Jak działa alokacja w celu C? - cel C

W jaki sposób alokacja działa w Objective C? - cel C

Wiem, że alokacja jest metodą klasową, która tworzy obiekt klasy i wskazuje jej wskaźnik „isa” na klasę, i w ten sposób mapowane są komunikaty w czasie wykonywania.

i mam pewien pomysł na temat replaceWithZone i stref.

Czy ktoś może mi powiedzieć lub wskazać mi ładny link, który wyjaśnia: -

W jaki sposób wskaźnik jest wskazywany na odpowiednią klasę?

Ile pamięci jest przydzielone?

Jak tworzona jest pamięć dla elementów dziedziczonych z klasy nadrzędnej?

Jeśli id ​​jest typedef dla objc_object *, co robijest wskaźnikiem do, to jak trzyma dowolny obiekt, ponieważ wskaźnik zaprowadzi nas do tabeli wysyłki, która ma selektory metod, ale czy mają coś, co mówi nam, którzy członkowie danych powinni tam być?

Odpowiedzi:

8 dla odpowiedzi № 1

Kompilator wstawia dla Ciebie wywołania za pośrednictwem środowiska wykonawczego objc. Możesz znaleźć bibliotekę na swojej ścieżce dołączania objc/. objc/runtime.h będzie prawdopodobnie najbardziej interesujący. Jako bonus, kilka wybranych popularnych wiadomości pomija objc_msgSend z tymi wstawkami.

W jaki sposób wskaźnik jest wskazywany na odpowiednią klasę?

objc_constructInstance

Ile pamięci jest przydzielone?

class_createInstance
class_getInstanceSize

Jak tworzona jest pamięć dla członków dziedziczonych z klasy nadrzędnej?

Pamięć jest wyzerowana i isa jest ustawiony.

Jeśli id ​​jest typedef dla objc_object *, co robijest wskaźnikiem do, to jak trzyma dowolny obiekt, ponieważ wskaźnik zaprowadzi nas do tabeli wysyłki, która ma selektory metod, ale czy mają coś, co mówi nam, którzy członkowie danych powinni tam być?

Cokolwiek zostało ustawione przy inicjalizacji. Wskaźniki obiektów ObjC są po prostu surową pamięcią. W przeciwieństwie do innych języków, rzutowanie i konwersja typów pisanych jest bezpośrednim zestawem adresu zmiennej - nie ma wyraźnej promocji typu lub konwersji w pamięci w następującej konstrukcji:

MONDisplay * display = [NSString string];
NSLog(@"%@", display);

wskaźnik ma dokładnie tę samą wartość, którą zwraca [NSString string].


1 dla odpowiedzi nr 2

Aby dodać do dyskusji, Otrzymałem bardzo fajny link do jednego z moich podobnych pytań dotyczących wewnętrznych elementów Objective-C.

http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf

Mam nadzieję, że będzie to pomocne dla wielu, którzy tu przybędą :)