Как иметь несколько ссылок на строку - PullRequest
0 голосов
/ 27 декабря 2011

Пожалуйста, проверьте код ниже, где я создаю множественную ссылку для массива

NSMutableArray *array1 = [[NSMutableArray alloc] init];
NSMutableArray *array2 = array1;
[array1 addObject:@"One"];
[array1 addObject:@"Two"];

NSLog (@"Array1 %@",array1);
NSLog (@"Array2 %@",array2);

Вывод на консоль

Array1 ( Один, Два) Array2 ( Один, Два)

И Array1, и Array2 ссылаются на один и тот же адрес

Как и я старался для NSMutableString, у меня не получилось

NSMutableString *str1 = [[NSMutableString alloc] init];
NSMutableString *str2 = str1;
str1 = @"Hello";

NSLog (@"Str1 : %@", str1);
NSLog (@"Str2 : %@", str2);

Вывод на консоль: Str1 Hello Str2 (null)

Есть ли способ иметь ссылку на строку?

1 Ответ

2 голосов
/ 27 декабря 2011

Все вполне нормально.С:

str1 = @"Hello";

str1 больше не указывает на память, которую вы выделили двумя строками выше.str2 не изменился и все еще указывает на это место памяти.

Приведенный вами пример не выглядит одинаково для массивов и строк.В первом случае вы добавляете объектов в один массив, но не меняете значение любого указателя.

Во втором вы модифицируете ссылку на объект.

Второй пример должен быть записан как-то вроде:

NSMutableString *str1 = [[NSMutableString alloc] init];
NSMutableString *str2 = str1;
[str1 appendString:@"foo"];

NSLog (@"Str1 : %@", str1);
NSLog (@"Str2 : %@", str2);

Вывод:

Str1: foo
Str2: foo

Учитывая две ссылки на одну изменяемую строку (одно место в памяти), ииспользуя метод NSMutableString, обе ссылки будут изменены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...