Objective c 请求NSMutableArray实例计数时出现内存错误

Objective c 请求NSMutableArray实例计数时出现内存错误,objective-c,memory,error-handling,count,nsmutablearray,Objective C,Memory,Error Handling,Count,Nsmutablearray,运行此代码会让我: ( "", "" ) 这是由于最后一行。最后一行向我抛出一个exc_bad_访问内存错误。由于数组及其对象已正确分配和初始化,我不明白为什么要求数组计数会给我带来内存问题。我目前正在使用xcode 4程序中的自动引用计数 请解释代码中最后一行产生内存错误的原因。谢谢。arrayOfBookViews.count返回一个nsuigerNSInteger不是对象,而是原语。%@格式说明符只调用传递给它的对象上的description,因此您试图调用无效的基元上的方法 将日志更改为

运行此代码会让我: ( "", "" ) 这是由于最后一行。最后一行向我抛出一个exc_bad_访问内存错误。由于数组及其对象已正确分配和初始化,我不明白为什么要求数组计数会给我带来内存问题。我目前正在使用xcode 4程序中的自动引用计数


请解释代码中最后一行产生内存错误的原因。谢谢。

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


将日志更改为
NSLog(@“%d”,arrayOfBookViews.count)
您将得到您想要的结果。

您正在尝试打印
int
值。为此使用
%d

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);

请检查NSArray的
-count
方法的返回类型。您会发现它是一个
NSUInteger
,它是一个类型定义到
无符号int
无符号long
的标准C类型。您应该在格式说明符中使用
%u
%lu

不确定它是否导致内存泄漏,但arrayOfBookViews.count返回一个int,请尝试%i而不是%@。天哪,我犯了一个多么愚蠢的错误。非常感谢你们。你们需要一个强制转换来确保它完全安全。如果你想安全,你应该将计数强制转换为
int
,因为在64位上,整数是
无符号长的
,如果你有一个数组,有足够的对象来处理这个问题,你就有更大的问题了。@JeremyP,谢谢你的纠正,是的,我知道这一点。我只是针对通常与
int
类型一起使用的
%d
格式说。
NSLog(@"%d",arrayOfBookViews.count);