我正在尝试学习使用NSMutableArray实现int数组的最佳实践。乍一看,似乎需要编写更多的代码来管理它们相对于其他语言,如C或JAVA。
我呼吁用户体验有两个原因:(i)了解ios风格的int数组的代码编写实践; (ii)找到理由为什么尽管编码繁重,但这些数组在日常实践中与int array[7]
证明了自己的合理性;
下面是一组示例模板,说明如何以非常通用的方式初始化,分配,读取和写入实现整数一维数组的NSMutableArray。
int arrayIndex;
int arrayValue;
//DECLARE arrayOfInt
@property (atomic, strong) NSMutableArray *arrayOfInt;
//ALLOCATE AND INITIALIZE arrayOfInt
self.arrayOfInt = [[NSMutableArray alloc] init];
//...fill arrayOfInt (write)
[self.arrayOfInt addObject: [NSNumber numberWithInt: arrayValue]];
//... read arrayOfInt
arrayValue = [(NSNumber*)[self.arrayOfInt objectAtIndex: arrayIndex ] intValue];
//...replace arrayOfInt (write)
[self.arrayOfInt replaceObjectAtIndex: arrayIndex withObject: [NSNumber numberWithInt: arrayValue ]];
答案 0 :(得分:2)
如果你想在Objective-C中使用int array [7],你可以编写
int array [7];
Objective-C是C的扩展。每个C代码都是合法的Objective-C代码。还有Objective-C ++,它是C ++的扩展,所以你可以在Objective-C中使用std :: array。
另一方面,如果你想要一个大小可调的数组,在C中你必须使用malloc,realloc,跟踪大小,跟踪生命,在正确的时间免费通话,担心悬空指针,这在Objective-C中更容易处理。
答案 1 :(得分:1)
你也可以用更短的方式写出相同的内容(如果你要问的话......),就像这样:
// ... DECLARE ARRAY
property ( atomic, strong ) NSMutableArray *ARRAY;
// ...分配和初始化阵列
_ARRAY = [NSMutableArray new];
// ...填写ARRAY(写)
[_ARRAY addObject:@( VALUE )];
// ...使用值
声明数组_ARRAY = @[ @( INT1 ), @( INT2 ), @( INT3 ) ];
// ...阅读
int VALUE = [[_ARRAY objectAtIndex:INDEX] intValue];
// ...替换(写)
[_butOnStars replaceObjectAtIndex:INDEX withObject:@( VALUE )];
答案 2 :(得分:1)
一旦我开始使用objC,就会达成一致,但现代语法
会更好让我们比较两者:
@property (atomic, strong) NSMutableArray *ARRAY;
//c array
@property (atomic, strong) int *ARRAY;
看起来一样。
分配和初始化阵列
self.ARRAY = [NSMutableArray array];
self.ARRAY = [@[@1, @2, @3, @4] mutableCopy];
//c array
self.ARRAY = malloc(numElements*sizeof(int));
绝对偏爱NSMutableArray
DEALLOCATE ARRAY
self.ARRAY = nil; //not really needed
//c array
free(self.ARRAY);self.array=nil;
绝对偏爱NSMutableArray
...填写ARRAY(写)
[self.ARRAY addObject: @(VALUE)];
self.ARRAY[ARRAY.count] = @(VALUE);
//c array
Not existent
绝对偏爱NSMutableArray
...阅读
VALUE = [self.ARRAY[INDEX] intValue];
//c array
VALUE = self.ARRAY[INDEX];
C数组得到了点
...替换(写)
self.ARRAY[INDEX] = @(VALUE);
//c array
self.ARRAY[INDEX] = VALUE;
差不多
总结: 使用NSMutableArray时,您可以更轻松地进行内存管理,快速枚举,一些奖励方法和几乎相同的代码。权衡是你有这个NSNumber创建和objC消息。所以,如果它是关于速度的,我绝对会选择c阵列。但对于大多数情况来说,NSArray足够好了。并且不必调试badAccess错误但得到正确的indexOutOfBounds错误;)
答案 3 :(得分:1)
iOS的数组类型“很重”,因为它们做了很多,而且它们是必须初始化的对象。
如果你选择这样做,你可以使用c风格的数组,但是你没有使用数组类型的好处。