Сохранить счет в цели C return -1

Я новичок в цели 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 ответа

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

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

Грэм Ли ответил на вопрос, характерный для вашего примера.

не только для вашего примера, но и для вашего вопроса (предмета):

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

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

Другие вопросы по тегам