2013-09-12 1 views
-1

Некоторые классы фундамента, такие как NSString или NSArray, имеют методы экземпляра, которые что-то делают с этим экземпляром, но никогда не требуют, чтобы экземпляр был предоставлен тогда. Например:Как классы фундамента знают, какой экземпляр действует, когда вызывается метод экземпляра?

NSArray * array = @ [@ "hi"];

Int number = [array count];

Метод подсчета знает, какой массив рассчитывать, не запрашивая его. Как вы это делаете? Я хочу создать категорию в NSString с помощью метода экземпляра incrementByOne. Я не хочу запрашивать строку в замедлении метода, я хочу знать, к какому объекту я выполняю действие, точно так же, как подсчет знает, к какому массиву нужно работать. Если кто-то может мне помочь, я бы очень признателен.

ответ

0

В вашем примере:

[array count]; 

вы отправляете count сообщений для экземпляра с именем array. Экземпляр, отправленный в сообщение, определяется частью array этого выражения. Внутри определения метода, в котором вы действуете, ссылается self. В вашем incrementByOne например, метод экземпляра может сделать что-то вроде

- (NSInteger)incrementByOne 
{ 
    return [self length] + 1; 
} 

Название self будет ссылаться на то, что экземпляр, что сообщение было отправлено.