- Члены класса называются инвариантами;
- Создаваемые в Objective-С объекты классов размещаются в динамической памяти;
- Тип id является указателем на объект любого класса (как void *);
- Если тип, возвращаемы методом, не указан, то считается, что возвращается значение типа id;
- Нулевой указатель именуется константой nil;
- Инвариант isa присутствует в любом объекте класса, унаследовавшего класс NSObject;
- Все классы должны наследовать класс NSObject;
- Каждый класс сам по себе тоже является объектом;
- Каждый объект Objective-C содержит в себе атрибут (инвариант) isa - указатель на объект класса данного объекта (экземпляра). Объект класса для данного объекта (экземпляра) автоматически создается компилятором и существует как один экземпляр, на который через isa ссылаются все экземпляры данного класса;
- Все зарезервированные слова Objective-C, отличающиеся от зарезервированных слов языка С, начинаются с символа @;
- Строковая константа класса NSString записывается как @”my string”;
- Директива @protected стоит по умолчанию. Ограничивает область видимости инвариантов класса методами класса и методами производных классов;
- Тип BOOL (на самом деле это unsigned char) принимает только константные значения YES и NO;
- Объект выполняет метод если ему приходит сообщение, именуемое так же, как и требуемый метод. Такое сообщение называется селектор метода;
- Директива @selector(name_of_method) возвращает скомпилированный селектор для имени метода name_of_method;
- При посылке сообщения в nil оно исчезает;
- Если в начале прототипа метода поставить знак '+', то такой метод будет считаться методом класса;
- Такой метод не принимает неявный параметр self, соответственно указатель super тоже работать не будет;
- Если в начале прототипа метода поставить знак '-', то такой метод называется методом объекта (или экземпляра);
- Указатель на данные экземпляра текущего(данного) объекта доступен посредством зарезервированного слова self, а указатель на данные экземпляра базового класса – через super;
- Все методы объектов в Objective-C являются виртуальными и всегда следуют динамическому полиморфизму;
- В метод объекта также передается неявный параметр _cmd – селектор этого метода из глобальной таблицы селекторов;
- Примеры описания (объявления) методов - метода объекта класса, метода класса без аргументов, с одним, с двумя и с переменным числом аргументов, соответственно:
+ (id)method1;
- (void) method2;
- (void) method3: (float) the_value1;
- (void) method4: (float) the_value2 second_part_of_name_method4: (float) the_value3;
- method: (id) object, ...; - Синтаксис вызова метода без параметров, с фиксированным числом параметров, с переменным числом параметров, соответственно, таков:
[receiver method];
[receiver method_arg1: 10 arg2: 10] - в данном случае имя метода является таким - method_arg1:arg2: Этот момент наиболее трудно воспринимаем;
[receiver variable_number_parameters: var1, var2, var3]; - При посылке сообщения объекту, который принадлежит классу, не реализовавшему заказанный метод, возникает исключение, которое приводит к незапланированному завершению;
- Поэтому, когда такая ситуация возможна, лучше провести соответствующую проверку:
if ([object respondsToSelector: @selector(method::)])
{
[object method: 10 : 10];
}
else
{
} - Сообщение [receiver method] преобразуется в Си функцию с прототипом:
id objc_msgSend(id receiver, SEL method, ...);
- Тип SEL определен как char const*;
- Во время выполнения все селекторы индексируются целыми значениями согласно глобальной таблице селекторов;
- Глобальная таблица селекторов - это такая таблица, в которой некоему уникальному целому числу (селектору) соответствует своя строка (имя метода);
- Функция objc_msgSend пользуясь инварианом isa oбъекта просматривает локальный список селекторов класса, чтобы определить, отвечает ли объект данного класса на сообщение method. Если у объекта-приемника данный селектор отсутствует, функция objc_msgSend() просматривает список селекторов его базового класса и т.д.;
вторник, 23 июня 2015 г.
Objective-C шпоргалка, часть 1
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий