сохранить счет в iphone - PullRequest
1 голос
/ 23 ноября 2010

Я использовал [anArray retainCount], чтобы получить счет сохранения массива .. (я знаю, что это не следует использовать, но я использую только для изучения концепции сохранения)

Ниже приведен мой код.


NSString *str = [[NSString alloc] initWithFormat:@"a,b,c,d"];
NSArray  *anArray =[[NSArray alloc]init];
NSLog(@"Retain count: %i", [anArray retainCount]);
anArray=[str componentsSeparatedByString:@","];
NSLog(@"Retain count: %i", [anArray retainCount]);  

выход

Retain count: 2
Retain count: 1

я думаю, что должно быть наоборот, но ....

Ответы [ 3 ]

7 голосов
/ 23 ноября 2010

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

. В ваших примерах:

 NSArray  *anArray =[[NSArray alloc]init];

Вы выделили "anArray" (вызывая alloc), поэтомуВы ответственны за вызов release.

anArray=[str componentsSeparatedByString:@","];

Теперь вы получили новый объект (утечка оригинала, как сказал Сеанд).На этот раз вы не являетесь владельцем объекта (поскольку componentsSeparatedByString не имеет alloc или copy в его имени), поэтому вы не должны освобождать его.

Не беспокойтесь о том, что такое retainCountявляется;стремитесь к собственному вязанию и выпускайте предметы, которые вам следует, и не отпускайте объекты, которые вам не принадлежат.

5 голосов
/ 23 ноября 2010

Эта строка ... anArray = [str componentsSeparatedByString: @ ","];

Вы уничтожили исходное назначение 'anArray' (таким образом создавая утечку). В реальной жизни вы бы хотели сначала [выпустить анАррей]. Вот почему счетчик удержаний вернулся к 1.

1 голос
/ 23 ноября 2010

В документации указывается, что счет сохранения вряд ли предоставит какую-либо полезную информацию.Это НЕ хороший способ узнать о концепциях сохранения и выпуска.

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