Ошибка памяти при запросе счетчика экземпляра NSMutableArray - PullRequest
0 голосов
/ 02 ноября 2011
arrayOfBookViews = [[NSMutableArray alloc] init];
BookView *book1 = [[BookView alloc] init];
[arrayOfBookViews addObject:book1];
BookView *book2 = [[BookView alloc] init];
[arrayOfBookViews addObject:book2];
NSLog(@"%@",arrayOfBookViews);
NSLog(@"%@",arrayOfBookViews.count);

Запуск этого кода дает мне: ("", ""), что связано со второй последней строкой.Последняя строка затем выдает мне ошибку памяти exc_bad_access.Поскольку массив, а также его объекты правильно распределены и инициализированы, я не понимаю, почему запрос количества элементов должен вызывать проблемы с памятью.В настоящее время я использую автоматический подсчет ссылок в этой программе с xcode 4.

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

Ответы [ 3 ]

2 голосов
/ 02 ноября 2011

arrayOfBookViews.count возвращает NSUInteger. NSUInteger это не объект, это примитив. Спецификатор формата %@ просто вызывает description для переданного ему объекта, поэтому вы попытались вызвать метод для недопустимого примитива.

Измените журнал на NSLog(@"%d",arrayOfBookViews.count);, и вы получите желаемый результат.

0 голосов
/ 02 ноября 2011

Пожалуйста, проверьте тип возврата метода NSArray -count.Вы обнаружите, что это NSUInteger, который является typedef для unsigned int или unsigned long, который является стандартным типом C.Вы должны использовать %u или %lu в спецификаторе формата.

0 голосов
/ 02 ноября 2011

Вы пытаетесь напечатать int значение. Для этого используйте %d:

NSLog(@"%d",arrayOfBookViews.count);
...