ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C Часть 1

Указатели продолжение

И так, мы уже поняли, что в Objective-C, объекты никогда не используются напрямую, но всегда через указатели на них. И вот почему, например, мы используем указатель нотации NSMutableString *string1. На самом деле, когда мы используем слово «объект» вObjective-C, мы, как правило, имеем ввиду «указатель на объект». Но поскольку мы всегда использовали объекты через указатели, мы используем слово «объект» как ярлык. Тот факт, что объекты всегда используются через указатели имеет важные последствия, вы должны понять: несколько переменных могут быть ссылкой один и тот же объект одновременно. Например, после исполнения линииstring1 = @»String one»;, переменная string1 ссылается на объект, представляющий строку «String one».

Объекты всегда управляются указателями. Теперь предположим, что мы присваиваем значение string1 переменной string2 (string1 = string2;). В результате, string1 и string2 теперь указывают на один и тот же объект. Множество переменных могут ссылаться на один объект. В такой ситуации, послав сообщение в объект используя string1, как получятеля ([string1 appendString:@» test»];) имеем тот же эффект, как в случае отправки сообщения, используя string2 ([string2 appendString:@» test»];):

<code data-result="[object Object]">NSMutableString *string1 = [NSMutableString stringWithCapacity:10]; 
[string1 appendFormat:@"Исходная строка."];
NSMutableString *string2 = string1; 
NSLog(@"string1 указывает на строку: %@.", string1);
NSLog(@"string2 указывает на строку: %@.", string2);
NSLog(@"/n"); 
[string1 appendString:@" Дополнительная строка"]; 
NSLog(@"string1 указывает на строку: %@.", string1); 
NSLog(@"string2 указывает на строку: %@.", string2);</code>

Результатом этого кода будет:

string1 указывает на строку: Исходная строка..

string2 указывает на строку: Исходная строка..

string1 указывает на строку: Исходная строка. Дополнительная строка.

string2 указывает на строку: Исходная строка. Дополнительная строка.

Возможность иметь ссылки на один объект одновременно из разных мест программы — неотъемлемая особенность объектно-ориентированных языков.

Comments are closed.