Я уже говорил, что в программе ничего не происходит до тех пор, пока объекту не отправляется сообщение. Но я также сказал, что экземпляров нет до тех пор, пока программа их не создаст.

С самого начала в программе имеются только классы. Так как же создаются эти экземпляры? Для создания экземпляров во время работы программы должна иметься возможность отправить сообщение чему-то, иначе ничего не произойдет. Но если нет экземпляров, то куда же отправлять сообщение “сделай экземпляр”?

Ответ заключается в том, что классы сами по себе являются объектами и им могут быть отправлены сообщения. И действительно, одно из самых важных заданий, которое вы можете попросить сделать класс, отправив ему сообщение, — это создать свой экземпляр. Таким образом, есть шаг, отсутствующий на приведенном ранее рис. 2.1. На этом рисунке показан класс и экземпляр, с кодом в классе и сообщением, посланным экземпляру, но не показано, как был создан экземпляр класса. Более полная картина будет выглядеть так, как показано на рис. 2.2.

 Создание экземпляра класса

Рис. 2.2. Создание экземпляра класса

Таким образом, все начинает выглядеть так, как будто имеются два вида сообщений: сообщения, которые вы можете отправить классу (например, потребовать от класса Dog создания экземпляра собаки), и сообщения, которые вы можете отправить экземпляру (например, потребовать от конкретной собаки залаять). Это на самом деле так. Говоря более строго, весь код находится в методах класса, но сами методы бывают двух видов: методы класса и методы экземпляра. Если метод является методом класса, сообщение можно отправить классу. Если метод является методом экземпляра, сообщение отправляется экземпляру класса.

В синтаксисе Objective-C методы класса и методы экземпляра отличаются использованием знака “плюс” или “минус’’. Например, в документации класса NSString список его методов начинается следующим образом:

+ string
- init

Метод string является методом класса, а метод init — методом экземпляра.

В общем случае, хотя и не всегда, методами класса являются фабричные методы, то есть методы для создания экземпляров. Это имеет смысл, потому что скорее всего первое, что вы потребуете от класса, — это создать экземпляр самого себя. Вы можете решить, что классу в действительности нужен только один метод класса для создания своего экземпляра (и, строго говоря, это так и есть), но на самом деле классы, как правило, предоставляют несколько фабричных методов исключительно для удобства программиста. Например, вот три метода класса NSString:

+ string
+ stringWithFormat:
+ stringWlthContentsOfFile:encoding:error:

Все они создают экземпляры. Первый метод класса, string, создает пустой экземпляр NSString (строка без текста). Второй метод класса, stringWithFormat:, создает экземпляр NSString на основе предоставленного вами текста, который может быть преобразован в текст других значений. Например, вы можете использовать его, чтобы из целого числа 9 создать экземпляр NSString @"9". Третий метод класса считывает содержимое файла и генерирует экземпляр NSString из этого содержимого. Когда вы приходите к написанию своих собственных классов, вы также вполне можете создать несколько методов класса, которые будут действовать в качестве фабрики экземпляров для большего удобства программирования.


Похожие статьи

 

 

 

Добавить комментарий