Сохранить счет в цели C return -1 - PullRequest
0 голосов
/ 17 октября 2010

Я новичок в цели C, у меня есть NSMutableArray с 3 объектами в нем, затем я пытаюсь напечатать retainCount массива.Почему итоговое возвращение retainCount -1?Спасибо

NSLog(@"myArray has retain count of %d", [myArray retainCount]);    
[myArray release];
NSLog(@"myArray has retain count of %d", [myArray retainCount]);

Результат с консоли:

2010-10-17 11:58:06.407 TestRetainCount [527:a0f] myArray has retain count of 1
2010-10-17 11:58:06.407 TestRetainCount [527:a0f] myArray has retain count of -1

Ответы [ 3 ]

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

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

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

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

Грэм Ли ответил на вопрос, относящийся к вашему примеру.

не относится к вашему примеру, но к вашему вопросу (теме):

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

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

Невозможно рассчитывать на точное значение retainCount из-за синхронизации автоматически выпущенных объектов.Тем не менее, посчитайте ваш alloc / init, new, retains и т. Д. И сопоставьте с соответствующим выпуском.

...