Инкапсуляция данных, или, как мне нравится называть ее, кому она принадлежит, и кто должен знать об этом, составляет много объектно-ориентированного программирования. Кому нужно знать, часто удовлетворяются методы доступа, но они становятся довольно дорогими, если все они приводят к objc_msgsend только для чтения переменной. C++ отвечает на проблему с помощью встроенных методов - используйте ключевое слово «inline» перед определением или определите метод в объявлении класса, а компилятор помещает код доступа в код вызывающего, сохраняя служебные данные, связанные с фактическим вызовом функции.Методы Inline Accessor (getter/setter) в Objective-C
class IntWrapper {
public:
int getInt() { return anInt; }
protected:
int anInt;
};
Подобный синтаксис компенсируется ошибкой complier в Objective-C. Изучив языковые руководства в Xcode («[Object-Oriented] Programming с Objective-C»), я не вижу ссылки на «встроенный» метод. Есть ли такая вещь, как inline в Objective-C? Это называется чем-то еще? Если кто-нибудь может указать мне на документацию, которая ссылается на inline, очень ценится.
Используя простой тестовый код:
@interface ClassA : NSObject
{
int anInt;
}
- (int) anInt;
@end
@implementation ClassA
- (int) anInt { return anInt; }
@end
и глядя на сборку кода, который использует его, он выглядит примерно 25 команд.
Только функции C могут быть встроены, методы Objective-C, к сожалению, нет. – Cristik
Вы можете узнать больше об этом здесь: http://stackoverflow.com/questions/8194504/does-llvm-convert-objective-c-methods-to-inline-functions – Cristik
И стоит добавить, что конвенция должна использовать '@ property', чтобы избежать шаблона объявления переменных и его аксессуаров. –