Сохранить количество в свойстве Копировать - PullRequest
0 голосов
/ 13 августа 2010

, пожалуйста, прочитайте следующий код: *

AddressCard *card1 = [[AddressCard alloc] init]; 
AddressCard *card2 = [[AddressCard alloc] init];

[card1 setName:[NSMutableString stringWithString:@"Deepak"] andEmail:[NSMutableString stringWithString:@"deepak@paymate"]];

NSMutableString * temp = [NSMutableString stringWithString:@"Deepak"];
r1 = [temp retainCount];
r2 = [card1.name retainCount];

//[card2 setName:card1.name];//retain count 2
//OR//
[card2 setName:temp];// retain count 1

r1 = [card2.name retainCount];

Это несколько смущает, потому что в обоих случаях тип ввода - строка.

Заранее спасибо.д

Ответы [ 2 ]

0 голосов
/ 13 августа 2010

Я думаю, что вы, кажется, упускаете точку изменчивых и неизменных объектов.Когда вы вызываете setName:andEmail:, есть ли логическая причина, по которой этот метод ожидает изменяемые строки?Например, этот метод изменяет значения этих строк, вставляя или удаляя символы?Они должны быть изменяемыми, только если вы намереваетесь изменить содержимое строки.Если вы только присваиваете строки другой переменной и не изменяете фактическое содержимое строки, то вместо этого они должны быть неизменяемыми NSStrings.

Кроме того, если вы не знаете, когда сохранять и когда освобождать объекты, пожалуйстаубедитесь, что вы прочитали и поняли Руководство по программированию управления памятью какао .Это, вероятно, ответит на все ваши вопросы о том, какие методы / свойства будут сохранять объекты, а также когда вам следует освобождать объекты.

0 голосов
/ 13 августа 2010

Вам, как программисту, не нужно беспокоиться о точном значении сохраняемого количества (в основном). Вы должны отслеживать, какие объекты принадлежат другим.

В вашем коде, где вы получаете, сохраняется количество r1 & r2 ....

Ничему не принадлежит temp, он был создан с помощью метода класса (+ method), поэтому он будет освобожден при следующей очистке пула автоматического выпуска.

card1 владеет своим «именем»

, когда вы устанавливаете [card2 setName:temp];, когда card2 принадлежит темп. Он больше не находится под угрозой уничтожения при следующем выпуске пула.

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