Экземпляры являются сердцем активности программы на языке Objective-C. Получение и управление экземплярами будет иметь решающие значение для всего, что вы делаете. Почти каждая строка вашего кода будет связана с одним или несколькими из следующих видов деятельности:
- Ссылка на уже существующий экземпляр.
- Создание нового, ранее не существовавшего экземпляра.
- Присваивание экземпляра переменной.
- Отправка сообщения экземпляру.
- Передача экземпляра в вызов метода в качестве параметра.
Создание экземпляров
Объекты ваших классов создаются автоматически во время запуска программы, но экземпляры должны создаваться индивидуально в процессе работы программы. В конечном счете каждый экземпляр начинает существование единственным способом: когда некто простит класс создать свой экземпляр. Однако это может быть сделано тремя путями: с помощью готовых экземпляров, созданием экземпляра с нуля и созданием экземпляра на основе nib.
Готовые экземпляры
Один из способов создания экземпляров — косвенный, путем вызова кода, который создает экземпляр за вас. Экземпляр, полученный таким путем, можно рассматривать как «готовый экземпляр». (Это придуманное мною название, а не официальный термин). Рассмотрим следующий простой код:
[obj-c]NSString* s2 = [s uppercaseString];[/obj-c]
Документация по методу экземпляра uppercaseString класса NSString гласит, что он возвращает строку, в которой каждый символ получателя заменен соответствующем значением в верхнем регистре. Другими словами, вы отправляете сообщение uppercaseString экземпляру класса NSString и получаете обратно другой, отличный от исходного, вновь созданный экземпляр класса NSString.
После выполнения приведенной строки кода s2 указывает на экземпляр класса NSString, который до этого не существовал.
Экземпляр класса NSString, созданный методом uppercaseString, передается вам готовым. Ваш код ничего не говорит об создании его экземпляра, он просто отправляет сообщение uppercaseString. Однако понятно, что кто-то отправляет сообщение о создании экземпляра, поскольку таковое имеет место, вы получаете новоиспеченный экземпляр класса NSString.
Этот «кто-то», по всей видимости, код в классе NSString. Но мы не должны беспокоиться о деталях. Нам гарантируется получение нового, готового к немедленному употреблению экземпляра класса NSString, и это все, о чем надо знать.
Аналогично любой фабричный метод создает экземпляр класса и возвращает получившийся экземпляр как готовый. Так, например, метод stringWithContentsOfFile:encoding:error: класса NSString читает файл и создает его экземпляр, представляющий содержимое файла. Вся работа по созданию экземпляра выполнена за вас. Вы просто получаете результирующую строку и можете делать с ней, что вам нужно.