>#import "Person.h"


>@implementation Person


>– (void) walkAtKilometersPerHour:(CGFloat)paramSpeedKilometersPerHour{

>/* здесь пишем код для этого метода */

>}


>– (void) runAt10KilometersPerHour{

>/* Вызываем метод walk в нашем собственном классе и передаем значение 10 */

>[self walkAtKilometersPerHour:10.0f];

>}

>@end


Типичный метод в языке Objective-C имеет следующие качества.

1. Префикс указывает компилятору, является ли данный код методом экземпляра (—) или методом класса (+). К методу экземпляра можно обратиться лишь после того, как программист выделит и инициализирует экземпляр вашего класса. Получить доступ к методу класса можно, вызвав его непосредственно из этого класса. Не волнуйтесь, если на первый взгляд это кажется сложным. В этой книге мы рассмотрим многочисленные примеры методов, пока просто следите за ходом рассказа.

2. Тип данных для метода, если метод возвращает какое-либо значение. В примере мы указали тип данных void. Так мы сообщаем компилятору, что не собираемся возвращать от метода какое-либо значение.

3. Первая часть имени метода, за которой идет первый параметр. Метод может и не иметь параметров. Методы, не принимающие параметров, довольно широко распространены.

4. Список последующих параметров, идущих за первым.

Рассмотрим пример метода с двумя параметрами:


>– (void) singSong:(NSData *)paramSongData loudly:(BOOL)paramLoudly{

>/* Параметры, к которым мы можем обратиться здесь, в этом методе, таковы:


>paramSongData (для доступа к информации о песне)

>paramLoudly сообщает нам, должны мы петь песню громко или нет

>*/

>}


Важно учитывать, что каждый параметр каждого метода обладает внешним и внутренним именем. Внешнее имя входит в состав метода, а внутреннее имя – это фактическое название (или псевдоним) параметра, которое может использоваться в пределах реализации метода. В предыдущем примере внешнее имя первого параметра – singSong, а внутреннее – paramSongData. Внешнее имя второго параметра – loudly, а внутреннее – paramLoudly. Имя метода и внешние имена его параметров вместе образуют сущность, которая называется селектором метода. В данном случае селектор упомянутого метода будет иметь вид singSong: loudly:. Как будет объяснено далее в этой книге, селектор является идентификатором каждого метода в среде времени исполнения. Никакие два метода в рамках одного и того же класса не могут иметь одинаковые селекторы.

В нашем примере мы определили в файле реализации класса Person (Person.m) три метода:

walkAtKilometersPerHour:;

• runAt10KilometersPerHour;

• singSong: loudly:.

Если бы мы хотели использовать любой из этих методов из какой-нибудь сущности, находящейся вне класса, например из делегата приложения, то должны были бы предоставить эти методы в нашем файле интерфейса (Person.h):


>#import 


>@interface Person: NSObject


>@property (nonatomic, copy) NSString *firstName;

>@property (nonatomic, copy) NSString *lastName;


>– (void) walkAtKilometersPerHour:(CGFloat)paramSpeedKilometersPerHour;

>– (void) runAt10KilometersPerHour;


>/* Не предоставляем метод singSong: loudly: для доступа извне.

>Этот метод является внутренним для нашего класса. Зачем же нам открывать к нему доступ? */


>@end


Имея такой файл интерфейса, программист может вызывать методы walkAtKilometersPerHour: и runAt10KilometersPerHour извне класса Person. А метод singSong: loudly: так вызывать нельзя, поскольку он не предоставлен в файле интерфейса. Итак, продолжим: попробуем вызвать все три этих метода из делегата нашего приложения и посмотрим, что получится: