Один из способов создания экземпляров — косвенный, путем вызова кода, который создает экземпляр за вас.

Экземпляр, полученный таким путем, можно рассматривать как “готовый экземпляр”. (Это придуманное мною название, а не официальный термин.) Рассмотрим следующий простой код:

NSString* s2 = [s uppercaseString];

Документация по методу экземпляра uppercaseString класса NSString гласит, что он возвращает “строку, в которой каждый символ получателя заменен соответствующим значением в верхнем регистре”. Другими словами, вы отправляете сообщение uppercaseString экземпляру класса NSString и получаете обратно другой, отличный от исходного, вновь созданный экземпляр класса NSString. После выполнения приведенной строки кода s2 указывает на экземпляр класса NSString, который до этого не существовал.

Экземпляр класса NSString, созданный методом uppercaseString, передается вам готовым. Ваш код ничего не говорит об создании его экземпляра, он просто отправляет сообщение uppercaseString. Однако понятно, что кто-то отправляет сообщение о создании экземпляра, поскольку таковое имеет место; вы получаете новоиспеченный экземпляр класса NSString. Этот “кто-то”, по всей видимости, — код в классе NSString. Но мы не должны беспокоиться о деталях. Нам гарантируется получение нового, готового к немедленному употреблению экземпляра класса NSString, и это все, о чем нам надо знать.

Аналогично любой фабричный метод создает экземпляр класса и возвращает получившийся экземпляр как готовый. Так, например, метод stringWithContentsOfFile: enco ding: error: класса NSString читает файл и создает его экземпляр, представляющий содержимое файла. Вся работа по созданию экземпляра выполнена за вас. Вы просто получаете результирующую строку и можете делать с ней, что вам нужно.


 

 

 

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