Objects in memory
CFRuntimeClass
Τα αντικείμενα CF* προέρχονται από το CoreFOundation, το οποίο παρέχει περισσότερες από 50 κλάσεις αντικειμένων όπως CFString
, CFNumber
ή CFAllocatior
.
Όλες αυτές οι κλάσεις είναι παραδείγματα της κλάσης CFRuntimeClass
, η οποία όταν καλείται επιστρέφει ένα δείκτη στον πίνακα __CFRuntimeClassTable
. Η CFRuntimeClass ορίζεται στο CFRuntime.h:
Objective-C
Χρησιμοποιούμενες ενότητες μνήμης
Τα περισσότερα δεδομένα που χρησιμοποιούνται από το runtime του ObjectiveC θα αλλάξουν κατά τη διάρκεια της εκτέλεσης, γι' αυτό χρησιμοποιεί ορισμένες ενότητες από το τμήμα __DATA στη μνήμη:
__objc_msgrefs
(message_ref_t
): Αναφορές μηνυμάτων__objc_ivar
(ivar
): Μεταβλητές ιδιότητας__objc_data
(...
): Μεταβλητά δεδομένα__objc_classrefs
(Class
): Αναφορές κλάσεων__objc_superrefs
(Class
): Αναφορές υπερκλάσεων__objc_protorefs
(protocol_t *
): Αναφορές πρωτοκόλλων__objc_selrefs
(SEL
): Αναφορές επιλογέα__objc_const
(...
): Δεδομένα κλάσηςr/o
και άλλα (ελπίζουμε) σταθερά δεδομένα__objc_imageinfo
(version, flags
): Χρησιμοποιείται κατά τη φόρτωση της εικόνας: Η έκδοση είναι προς το παρόν0
; Τα σημαία καθορίζουν την προεπιλεγμένη υποστήριξη GC, κλπ.__objc_protolist
(protocol_t *
): Λίστα πρωτοκόλλων__objc_nlcatlist
(category_t
): Δείκτης σε μη-τεμπέλιες κατηγορίες που έχουν οριστεί σε αυτό το δυαδικό__objc_catlist
** (category_t
): Δείκτης σε κατηγορίες που έχουν οριστεί σε αυτό το δυαδικό__objc_nlclslist
(classref_t
): Δείκτης σε μη-τεμπέλιες κλάσεις Objective-C που έχουν οριστεί σε αυτό το δυαδικό__objc_classlist
(classref_t
): Δείκτες σε όλες τις κλάσεις Objective-C που έχουν οριστεί σε αυτό το δυαδικό
Χρησιμοποιεί επίσης μερικές ενότητες στο τμήμα __TEXT
για να αποθηκεύσει σταθερές τιμές που δεν είναι δυνατό να γραφτούν σε αυτή την ενότητα:
__objc_methname
(C-String): Ονόματα μεθόδων__objc_classname
(C-String): Ονόματα κλάσεων__objc_methtype
(C-String): Τύποι μεθόδων
Κωδικοποίηση Τύπου
Το Objective-C χρησιμοποιεί κάποια μετατροπή για να κωδικοποιήσει τους τύπους επιλογέα και μεταβλητών απλών και πολύπλοκων τύπων:
Οι πρωτογενείς τύποι χρησιμοποιούν τον πρώτο χαρακτήρα του τύπου, όπως
i
γιαint
,c
γιαchar
,l
γιαlong
... και χρησιμοποιεί το κεφαλαίο γράμμα σε περίπτωση που είναι unsigned (L
γιαunsigned Long
).Άλλοι τύποι δεδομένων οι οποίοι χρησιμοποιούνται ή είναι ειδικοί, χρησιμοποιούν άλλους χαρακτήρες ή σύμβολα όπως
q
γιαlong long
,b
γιαbitfields
,B
γιαbooleans
,#
γιαclasses
,@
γιαid
,*
γιαchar pointers
,^
για γενικούςpointers
και?
γιαundefined
.Οι πίνακες, δομές και ένωση χρησιμοποιούν
[
,{
και(
Δήλωση Παραδείγματος Μεθόδου
Ο επιλογέας θα ήταν processString:withOptions:andError:
Κωδικοποίηση Τύπου
Το
id
κωδικοποιείται ως@
Το
char *
κωδικοποιείται ως*
Η πλήρης κωδικοποίηση τύπου για τη μέθοδο είναι:
Αναλυτική Ανάλυση
Τύπος Επιστροφής (
NSString *
): Κωδικοποιείται ως@
με μήκος 24self
(παράδειγμα αντικειμένου): Κωδικοποιείται ως@
, στη θέση 0_cmd
(επιλογέας): Κωδικοποιείται ως:
, στη θέση 8Πρώτο όρισμα (
char * input
): Κωδικοποιείται ως*
, στη θέση 16Δεύτερο όρισμα (
NSDictionary * options
): Κωδικοποιείται ως@
, στη θέση 20Τρίτο όρισμα (
NSError ** error
): Κωδικοποιείται ως^@
, στη θέση 24
Με τον επιλογέα + την κωδικοποίηση μπορείτε να ανακατασκευάσετε τη μέθοδο.
Κλάσεις
Οι κλάσεις στο Objective-C είναι μια δομή με ιδιότητες, δείκτες μεθόδων... Είναι δυνατόν να βρείτε τη δομή objc_class
στο κώδικα πηγής:
Αυτή η κλάση χρησιμοποιεί μερικά bits του πεδίου isa για να υποδείξει πληροφορίες σχετικά με την κλάση.
Στη συνέχεια, η δομή έχει ένα δείκτη προς τη δομή class_ro_t
που αποθηκεύεται στο δίσκο και περιέχει χαρακτηριστικά της κλάσης όπως το όνομά της, τις βασικές μεθόδους, τις ιδιότητες και τις μεταβλητές της παρουσίας.
Κατά τη διάρκεια της εκτέλεσης, μια επιπλέον δομή class_rw_t
χρησιμοποιείται περιέχοντας δείκτες που μπορούν να τροποποιηθούν, όπως μεθόδους, πρωτόκολλα, ιδιότητες...
Last updated