int release ()
Object * autorelease () ;
Object * retain () {
refCount++; return this;
}
const char * getName () const {
return name;
}
void setName ( const char * newName );
void setFlag ( int value ) {
flags |= value;
}
Объектная модель. Основные классы
void clearFlag ( int value ) flags &= -value;
bool testFlag ( int value ) const return (flags & value) == value;
Object * getOwner () const return owner;
void setOwner ( Object * newOwner ); static MetaClass classlnstance;
} ;
Объекты класса MetaClass служат для работы с так называемой метаин-формацией объекта. Они содержат имя класса и ссылку на метаинформа-цию родительского класса. Подобные объекты позволяют получать более точную информацию об объектах на этапе выполнения программы (поскольку сам язык С++ подобную информацию предоставить просто не в состоянии).
В качестве подобной метаинформации также может выступать версия и описание класса, методы для создания экземпляров класса (что позволяет построить так называемый виртуальный конструктор, когда тип создаваемого объекта определяется в ходе выполнения), списки переменных и методов (вместе с информацией об их типах). Последнее позволяет легко добавлять сохраняемость (persistence) и поддержку скриптовых языков (Python, Lua и др.).
Сам объект хранит ссылку на свою метаинформацию, которая разделяется всеми объектами данного класса.
Е
class MetaClass {
protected:
const char * className; // name of the class
MetaClass * superclass; // link to parent metaclass
public:
MetaClass ( const char * theClassName, MetaClass * super )
className = theClassName; superclass = super;
const char * getClassName {) const return className;
MetaClass * getSuperClass () const return superclass;
bool isKindOfClass ( const MetaClass& theClass ) const;
bool isInstanceOfClass ( const MetaClass& theClass ) const; };
Класс Object, как и все классы, производные от него, использует механизм учета ссылок на себя (reference counting). Каждый объект, который хочет хранить внутри себя ссылку на другой объект, должен вызвать у этого объекта метод retain, который увеличивает значение счетчика ссылок ref-Count на единицу. Когда объект становится ему больше не нужен, он должен вызвать метод release, уменьшающий значение счетчика на единицу. При этом если этот объект больше никому не нужен (refCount==0), то он будет автоматически удален.