Технически количество сохраняемых записей в ситуации, которую вы опубликовали, является неопределенным, поскольку вы никогда не инициализируете свои переменные. Вызов 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
для объекта, вы несете ответственность за освобождение или автоматическое освобождение этого объекта по завершении работы с ним. В противном случае это не ваша ответственность. Абсолютное количество сохраняемых объектов никогда не имеет значения.