在询问NSMutableArray实例的计数时出现内存错误

时间:2011-11-02 14:54:31

标签: objective-c memory error-handling count nsmutablearray

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 个答案:

答案 0 :(得分:2)

arrayOfBookViews.count会返回NSUIntegerNSUInteger不是一个对象,它是一个原始对象。 %@格式说明符只是在传递给它的对象上调用description,因此您尝试在无效的基元上调用方法。

将日志更改为NSLog(@"%d",arrayOfBookViews.count);,您将获得所需的结果。

答案 1 :(得分:0)

您尝试打印int值。请使用%d

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

答案 2 :(得分:0)

请检查NSArray的-count方法的返回类型。您会发现它是NSUInteger,它是unsigned intunsigned long的typedef,它是标准的C类型。您应该在格式说明符中使用%u%lu