Objective-c阵列

Objective-c阵列,objective-c,arrays,Objective C,Arrays,当我使用这段代码时,我有点困惑 NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/Volumes/" error:nil]; int arraysize = sizeof dirContents; 要获取“Volumes”目录的内容数组,但当我输出数组大小时,它表示该数组有8个条目,而该目录中只有4个文件?这不会是一个问题,但因为我一到达就使用for循环 NSString *

当我使用这段代码时,我有点困惑

NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/Volumes/" error:nil];

int arraysize = sizeof dirContents;
要获取“Volumes”目录的内容数组,但当我输出数组大小时,它表示该数组有8个条目,而该目录中只有4个文件?这不会是一个问题,但因为我一到达就使用for循环

NSString *volume1 = [dirContents objectAtIndex:4];
(4是for循环中的值)应用程序崩溃并拒绝启动


感谢您的帮助

您应该使用
int arraysize=[dirContents count]
来获得正确的大小


sizeof
是一个c风格的运算符,不能在Objective-c对象上正常工作。

sizeof
不返回数组的长度,但返回变量在内存中占用的大小。由于
dirContents
是一个指针,因此它只占用8个字节

要获取数组的长度,应使用

[dirContents count];

此外,在数组中,对象存储的索引从0开始。因此,如果数组只有4个元素,
[dirContents objectAtIndex:4]
将以运行时错误结束,因为您试图在第五个位置检索元素。

sizeof正在接收指针的大小。而是使用
intarraysize=[dirContents count]

获取
sizeof
不是查找
NSArray
元素数量的正确方法。使用
dirContents.count

谢谢,这很有效,但我很好奇为什么我在web上找到的方法不起作用?因为sizeof返回指向内存中Objective-C对象的指针的长度。只有指针的大小而不是对象的大小,当然也不是NSArray.sizeof的大小/计数将给出NSArray*的大小。sizeof pointer为8意味着您正在为64位平台编译,我确实忘记了:-)
sizeof dirContents
告诉您指针“dirContents”有8个字节长。与数组本身完全无关。