Как найти счет удержания? - PullRequest
       31

Как найти счет удержания?

0 голосов
/ 17 октября 2011

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

Nsstring *a;
Nsstring *b;

a = [b retain];

Что такое счетчик удержания a & b.

a = [b copy];

Что такое счетчик удержания a & b.

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

Ответы [ 2 ]

3 голосов
/ 17 октября 2011

Технически количество сохраняемых записей в ситуации, которую вы опубликовали, является неопределенным, поскольку вы никогда не инициализируете свои переменные. Вызов retain по неинициализированному указателю может привести к сбою.

Во-вторых, количество сохраняемых данных в вашей ситуации зависит от того, как вы инициализируете переменные.

NSString *a;
NSString *b = @"test";

a = [b retain];

/* Both variables reference the same object which has been retained.
   Retain count +1 
 */

NSString *a;
NSString *b = @"test 2";

a = [b copy];

/* `a` has a retain count +1 (a variable returned from a `copy`
   method has a retain count +1). `b` retain count does not change 
   (you haven't called `retain` on `b`, so it's count remains the
   same.
 */

Если вы еще этого не сделали, вам следует прочитать Руководство Apple по управлению памятью . Кроме того, если у вас нет веских причин для этого, вам следует использовать ARC , что освобождает вас от большинства головных болей от ручного управления памятью.


В комментариях к другому ответу вы спрашиваете, как определить счет сохранения для объекта. Вы всегда следите за этим сами. Другие объекты могут сохранить и освободить вашу строку, но вам все равно. Если вы создаете объект с помощью alloc, вызываете retain для объекта или copy для объекта, вы несете ответственность за освобождение или автоматическое освобождение этого объекта по завершении работы с ним. В противном случае это не ваша ответственность. Абсолютное количество сохраняемых объектов никогда не имеет значения.

0 голосов
/ 17 октября 2011

NSString не имеет счет сохранения, который будет иметь смысл.Но если вы используете в качестве общего примера, способ найти счет сохранения для объектов с нормальным счетом хранения:

[a retainCount]
...