【问题标题】:Initialize NSArray with size用大小初始化 NSArray
【发布时间】:2014-12-09 00:23:46
【问题描述】:

如何初始化一个只有 size 的 NSArray,以便以后使用 for 循环来填充它?我的 for 循环是

for (int i = 0; i < [myArray count]; i++) {
    myArray[i] = someData;
}

【问题讨论】:

  • 所以所有的答案都说我必须使用 NSMutableArray 而不是 NSArray。这是否意味着我不能直接使用 NSArray 来解决这个问题?
  • 一个 NSArray 是不可变的,这意味着它的内容将来不能被编辑。这也可以防止任何对象被添加到数组中或从数组中删除,因此它的长度将始终保持不变。另一方面,NSMutableArray 是可变的,因为即使在初始化之后,也始终可以在任何给定时间添加或删除对象。
  • 我的限制是我不希望大小不经意地改变,但同时,我希望用户能够更新值。该数组是一个布尔数组。我来自 Java,所以你理解我的烦恼。 NSMutableArray 意味着大小可以增长。那么如何在允许值可变的同时防止大小的无意更改?
  • @KatedralPillon 你不能用任何内置类做到这一点。如果您愿意,可以将 NSMutableArray 包装在您自己的类中或子类中。
  • 如果你只是存储 BOOL,你可以使用 C 数组。

标签: objective-c nsarray


【解决方案1】:

您无需使用特定大小对其进行初始化 - 您可以稍后添加对象:

NSMutableArray *myArray = [NSMutableArray array];

for (int i = 0; i < 100; i++) {
    [myArray addObject:someData];
}

如果您提前知道大小,性能会略有提升:

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:100];

但这是可选的。

【讨论】:

    【解决方案2】:

    NSNull 是用于表示未设置、无效或不存在的对象的类。因此,您可以使用此类的实例将数组填充到特定大小。

    NSUInteger sizeOfArray = 10;
    NSMutableArray *someArray = [NSMutableArray array];
    for (NSUInteger i = 0; i < sizeOfArray; i++) {
        [someArray addObject:[NSNull null]];
    }
    

    此外,如果i 位置的值不存在,则不能使用语法someArray[i] = xyz;,因为这会导致越界错误。

    【讨论】:

    • 有什么方法可以分配一个数组,以便稍后我可以在 array[i] = obj 之前使用 addObject 添加一些东西吗?
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多