Cry*_*tal 0 iphone objective-c nsarray
NSUInteger是否缺少一些东西.我本来想在我的.m文件中这样做.(我看到一些关于使用NSEnumerator的代码,但我不太了解它,所以我想我的需求,这就足够了).
所以我想这样做:
- (NSArray *)reverseArray:(NSMutableArray *)array {
NSMutableArray *anArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
for (NSUInteger i = [array count] - 1; i >= 0 ; i--) {
[anArray addObject:[array objectAtIndex:i]];
}
return anArray;
}
Run Code Online (Sandbox Code Playgroud)
这给了我编译器警告:i> = 0是NSUInteger的目的,或者是那些行.当我运行该程序时,它也会崩溃并访问一些超级巨大的数字.我不太清楚为什么.我可以在任何地方将i偏移1并执行此操作,这样可行:
- (NSArray *)reverseArray:(NSMutableArray *)array {
NSMutableArray *anArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
for (NSUInteger i = [array count]; (i) ; i--) {
[anArray addObject:[array objectAtIndex:i - 1]];
}
return anArray;
}
Run Code Online (Sandbox Code Playgroud)
我只是不明白为什么第一种方法不起作用.任何帮助,将不胜感激.谢谢!
NSUInteger是一个unsigned整数.所以,如果NSUInteger u=0你计算u-1,它就不会变成-1.相反,它会下溢并成为一个超级巨大的数字.
将代码更改为
for (NSInteger i = [array count] - 1; i >= 0 ; i--) {
Run Code Online (Sandbox Code Playgroud)
应该解决问题.
请注意,您实际上不必反转数组.for循环
for(a in array){
... do something with a ...
}
Run Code Online (Sandbox Code Playgroud)
枚举前向顺序中的元素,和
for(a in [array reverseObjectEnumerator]){
... do something with a ...
}
Run Code Online (Sandbox Code Playgroud)
以相反的顺序枚举元素.
| 归档时间: |
|
| 查看次数: |
1943 次 |
| 最近记录: |