我在我的接口类中将数组a,b,c和d声明为属性,并将它们初始化为:
[self setPatternA:[[NSMutableArray init] initWithArray:@[@0,@0,@1,@1,@2,@2]]];
[self setPatternB:[[NSMutableArray init] initWithArray:@[@3,@4,@4,@5,@5,@3]]];
[self setPatternC:[[NSMutableArray init] initWithArray:@[@3,@3,@4,@4,@5,@5]]];
[self setPatternD:[[NSMutableArray init] initWithArray:@[@0,@1,@1,@2,@2,@0]]];
现在我正试图像这样访问它们:
NSInteger a=[patternA objectAtIndex:3];
NSLog(@"pattern a: %ld", (long)a);
但是当我打印出它返回的内容时,它并不是我所期望的价值。我也得到一个“不兼容的指向整数转换的指针,初始化'NSInteger'(又名'long'),表达式为'id'。
另外,如果有人可以解释什么是“长”,那就太好了。
答案 0 :(得分:1)
您不会将整数或NSInteger
s放入数组中,而是放置对象,即NSNumber
的实例。
NSNumber *number = patternA[3];
long a = number.longValue;
会给你正确的价值。
这称为装箱/拆箱 - 将普通值放入对象中。所以你倾销的东西或多或少是包含对象的地址。
答案 1 :(得分:0)
您的数组包含NSNumber
- @1
是NSNumber
文字。 http://clang.llvm.org/docs/ObjectiveCLiterals.html
long
可以包含比int
更大的数字,但在内存中占用更多字节http://code.tutsplus.com/tutorials/objective-c-succinctly-data-types--mobile-21986