【问题标题】:How can I create an empty array in objective C, and assign value into it one by one?如何在目标 C 中创建一个空数组,并一一为其赋值?
【发布时间】:2011-01-21 01:34:38
【问题描述】:

在 Java 中,我可以做到这一点:

int[] abc = new int[10];
for(int i=0; i<abc.length; i++){
   abc[i] = i;
}

如何在 Objective C 中实现类似的东西?

我看到一些使用 NSMutableArray 的答案,这和 NSArray 之间的重量不同?

【问题讨论】:

    标签: objective-c arrays programming-languages for-loop


    【解决方案1】:

    试试这样的。

    #import <foundation/foundation.h>
    int main (int argc, const char * argv[])
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        NSMutableArray *myArray = [NSMutableArray array];
        [myArray addObject:@"first string"];
        [myArray addObject:@"second string"];
        [myArray addObject:@"third string"];
        int count = [myArray count];
        NSLog(@"There are %d elements in my array", count);
        [pool release];
        return 0;
    }
    

    循环看起来像:

    NSString *element;
    int i;
    int count;
    for (i = 0, count = [myArray count]; i < count; i = i + 1)
    {
       element = [myArray objectAtIndex:i];
       NSLog(@"The element at index %d in the array is: %@", i, element);
    }
    

    CocoLab

    【讨论】:

    • 这没有回答如何分配给特定索引。只有如何从中读取。
    【解决方案2】:
    NSMutableArray* abc = [NSMutableArray array];
    for (int i = 0; i < 10; ++ i)
       [abc addObject:[NSNumber numberWithInt:i]];
    return abc;
    

    这里,

    • NSMutableArray 是一种“可变”数组类型。还有一个常量数组超类型 NSArray。与 C++ 不同,ObjC 的数组没有类型。您可以将任何 ObjC 对象存储在 NSArray 中。
    • -addObject: 在数组末尾追加一个 ObjC。
    • 由于 NSArrays 只能存储 ObjC,因此您必须先将整数“装箱”到 NSNumber 中。

    这其实更类似于C++代码

    std::vector<int> abc;
    for (int i = 0; i < 10; ++ i)
       abc.push_back(i);
    return abc;
    

    【讨论】:

      【解决方案3】:

      我看到一些答案使用 NSMutableArray,wt之间的不同 这个和NSArray?

      NSArray不可变的:它无法更改。 NSMutableArray 是一个可变的子类,它向数组接口添加了允许操作其内容的方法。这种模式在 Cocoa 的许多地方都可以看到:NSStringNSSetNSDictionary 是特别常见的示例,它们都是具有可变子类的不可变对象。

      这样做的最大原因是效率。您可以对不可变对象做出关于内存管理和线程安全的假设,而您无法对可能从您下面改变的对象做出假设。

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 2023-03-16
        • 2011-07-03
        相关资源
        最近更新 更多