Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSArray计数返回长整数?_Objective C_Xcode_Count_Nsarray_Long Integer - Fatal编程技术网

Objective c NSArray计数返回长整数?

Objective c NSArray计数返回长整数?,objective-c,xcode,count,nsarray,long-integer,Objective C,Xcode,Count,Nsarray,Long Integer,我制作了一个简单的NSArray,然后从该数组中获取一个随机索引并将其存储为int,但是我收到一条警告,说它应该是一个长int,尽管我只希望它返回0、1或2。这不是一个问题,但我不明白为什么 NSArray *randomWordList = [NSArray arrayWithObjects:@"Hello", @"Test", @"Send", nil]; int randomWordIndex = rand() % [randomWordList count];` NSArray的c

我制作了一个简单的NSArray,然后从该数组中获取一个随机索引并将其存储为int,但是我收到一条警告,说它应该是一个长int,尽管我只希望它返回0、1或2。这不是一个问题,但我不明白为什么

NSArray *randomWordList = [NSArray arrayWithObjects:@"Hello", @"Test", @"Send", nil];  
int randomWordIndex = rand() % [randomWordList count];`

NSArray的
count
方法返回
NSUInteger
,这是64位生成的
无符号长
。编译器之所以警告您,是因为
int
所包含的数字范围小于
long
,因此它警告您可能会丢失数据


只需将
int randomWordIndex
更改为
nsuinter randomWordIndex

NSArray的
count
方法返回
nsuinter
,对于64位构建而言,它是一个
无符号长
。编译器之所以警告您,是因为
int
所包含的数字范围小于
long
,因此它警告您可能会丢失数据



只需将
int randomWordIndex
更改为
nsuinter randomWordIndex

,您就可以对其进行强制转换。您必须同意,编译器无法知道元素计数,因为数组是动态分配的,所以它只是假设最大值,即整数。

您可以强制转换它。您必须同意,编译器无法知道元素的计数,因为数组是动态分配的,所以它只是假设最大的值,即整数。

从技术上讲,
count
返回无符号的long,并且按照通常的整数提升规则,
%
的结果会变长。Objective-C在抱怨这一点时是随机的。从技术上讲,
count
返回一个无符号的long,并且按照通常的整数提升规则,它会使
%
的结果变长。Objective-C在抱怨这一点时是随机的。在我看来,应该避免使用强制转换,最好使用正确的类型作为
randomWordIndex
,特别是在这种情况下,
randomWordIndex
很可能会提供给
objectAtIndex:
,它希望
NSUInteger
已经存在。当然可以,但是如果他真的想要
int
,那么,他可以使用:)@dreamlax-奇怪的是,如果你直接将
长度
赋值给
int
,编译器不会抱怨。仅当您首先对值执行操作时。您必须承认,NSArray不太可能包含超过20亿个条目。在我看来,应该避免强制转换,最好为
randomWordIndex
使用正确的类型,特别是在这种情况下,
randomWordIndex
很可能会提供给
objectAtIndex:
,它希望
NSUInteger
已经存在。当然可以,但是如果他真的想要
int
,那么,他可以使用:)@dreamlax-奇怪的是,如果你直接将
长度
赋值给
int
,编译器不会抱怨。仅当您首先对值执行操作时。你必须承认,NSArray不可能包含超过20亿个条目。谢谢,我在看一本xcode已经过时的书,这是一个新功能还是他们犯了同样的错误?
NSUInteger
是在Mac OS X 10.5中引入的。再次感谢,我只是好奇,我做了一个长整数,它不再抱怨了,只是想知道为什么:)事实上,Leopard引入了整数,但是,我怀疑索引是否是
int
类型,因为
int
是有符号的;这会浪费记忆你应该像@dreamlax建议的那样做
NSUInteger
,而不是
long int
谢谢,我在看一本xcode已经过时的书,这是一个新功能还是他们犯了同样的错误?
NSUInteger
是在Mac OS X 10.5中引入的。再次感谢,我只是好奇,我做了一个长整数,它不再抱怨了,只是想知道为什么:)事实上,Leopard引入了整数,但是,我怀疑索引是否是
int
类型,因为
int
是有符号的;会浪费内存您应该按照@dreamlax的建议使用
NSUInteger
,而不是
long int