Я читал, что на IOS выполнения, класс становится структура (так и другие ос объекты), которые, как показано ниже:Почему Apple использует двойные указатели для списков методов в классе типа структуры на IOS выполнения
struct objc_class {
Class isa OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif
} OBJC2_UNAVAILABLE;
В выше структура, есть это:
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
Я новичок в C
, и я не совсем понимаю, почему OC использует указатель на указатель **
для списка методов.
Почему не использовать точно такую же структуру, как кэш:
struct objc_cache *cache OBJC2_UNAVAILABLE;
Поскольку кэш также содержит методы, которые использовались ранее.
Я думаю, что Apple, использует двойные указатели **
для method lists
вместо одного одного *
для cache
или protocols
по причине.
И почему это называется methodLists
вместо methodList
?
Я сейчас сравниваю cache
, protocols
с methodLists
.
Я думаю, что Apple использует **
для списков методов вместо *
для других по технической причине, и я хочу знать.
Если одного указателя *
достаточно для списков методов, почему Apple беспокоило использование двойного **
?
Вы изучаете определение для классов ObjC 2. Эта спецификация довольно старая, так как у нас ObjC 2.x уже несколько лет (не менее 6, IIRC). В любом случае вы спрашиваете, почему Apple (или даже NeXT) разработала его таким образом, и это мнение. Вопрос не принадлежит SO. – Avi
My C ржавый, но разве это не так, как объявить массив указателей, которые будут malloc'd? – danh
@Avi Я не спрашиваю мнения, я спрашиваю, почему я не могу просто использовать простой связанный список '* methodList', например' * protocols' или '* cache', и почему это' methodLists' вместо 'methodList '. – Boris