Objective c NSArray和NSMutable数组之间的差异 我用NASTRAGE使用NSCORE,我写了下面的代码 -(void)simplearrays { NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3]; for(int i =0;i<3;i++) { scanf("%d",&arr[i]); } for(int j =0; j<3;j++) { printf("\n%d",arr[j]); } } -(无效)SimpleRays { NSMUTABLEARRY*arr=[NSMUTABLEARRY阵列容量:3]; 对于(int i=0;i

Objective c NSArray和NSMutable数组之间的差异 我用NASTRAGE使用NSCORE,我写了下面的代码 -(void)simplearrays { NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3]; for(int i =0;i<3;i++) { scanf("%d",&arr[i]); } for(int j =0; j<3;j++) { printf("\n%d",arr[j]); } } -(无效)SimpleRays { NSMUTABLEARRY*arr=[NSMUTABLEARRY阵列容量:3]; 对于(int i=0;i,objective-c,Objective C,当您要从数组中添加/删除对象时,可以使用NSMutableArray 如果您仅使用对象创建数组,而不打算修改内容,请使用NSArray 你可以从一个数组转换到另一个数组。NSArray和NSMutableArray不仅仅是C数组的同义词,它们是具有自己接口的容器对象。如果你想在其中插入对象,它需要是一个NSMutableArray,你需要调用mutator方法,比如addObject:。你可以不能只使用[]操作符。同样,要读取对象,必须通过objectAtIndex:等方法 (请注意,您的代码在

当您要从数组中添加/删除对象时,可以使用
NSMutableArray

如果您仅使用对象创建数组,而不打算修改内容,请使用
NSArray


你可以从一个数组转换到另一个数组。

NSArray
NSMutableArray
不仅仅是C数组的同义词,它们是具有自己接口的容器对象。如果你想在其中插入对象,它需要是一个
NSMutableArray
,你需要调用mutator方法,比如
addObject:
。你可以不能只使用
[]
操作符。同样,要读取对象,必须通过
objectAtIndex:
等方法


(请注意,您的代码在语法上是有效的,这就是为什么编译器允许您这么做的原因——您正在使用
[]
取消对指针的引用。但它在语义上是非常错误的。它不会做您想做的事情,并且可能会以潜在灾难性的方式破坏内存。)

< pSnStaseNStutabRealEx是表示数组行为的基础类和数据类型。可以在它们中存储任何非本原类型的对象。既保留它们所存储的对象,又在移除它们时释放对象,或者释放数组对象本身。 何时使用哪个?如果您不太可能在数组中添加/删除对象,则应通过调用其中一个静态方法并指定要存储的对象来使用NSArray,即:

NSArray *colors = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", nil];
如果您可能在创建阵列后向阵列中添加/删除对象,则应使用NSMutableArray。您可以创建阵列,同时指定或不指定要存储的初始对象,然后随时向阵列中添加/删除对象,即:

NSMutableArray *colors = [[NSMutableArray alloc] init];
[colors addObject:@"Red"];
[colors addObject:@"Green"];
[colors addObject:@"Blue"];
[colors removeObjectAtIndex:0];
NSLog(@"Color: %@", [colors objectAtIndex:1]);
[colors release];

检查此项了解更多信息:

Cocoa数组不是C数组。它们是容器对象,与Java向量和数组列表有一些相似之处

不能使用C下标语法添加或检索对象,需要向对象发送消息

-(void)simplearrays
{
    NSMutableArray *arr = [NSMutableArray array]; 
    // arrayWithCapacity: just gives a hint as to how big the array might become.  It always starts out as
    // size 0.

    for(int i =0;i<3;i++)
    {
        int input;
        scanf("%d",&input);
        [array addObject: [NSNumber numberWithInt: input]];
        // You can't add primitive C types to an NSMutableArray.  You need to box them
        // with an Objective-C object
    }
    for(int j =0; j<3;j++)
    {
       printf("\n%d", [[arr objectAtIndex: j] intValue]);
       // Similarly you need to unbox C types when you retrieve them
    }
    // An alternative to the above loop is to use fast enumeration.  This will be
    // faster because you effectively 'batch up' the accesses to the elements
    for (NSNumber* aNumber in arr)
    {
       printf("\n%d", [aNumber intValue]);
    }
}
-(无效)SimpleRays
{
NSMUTABLEARRY*arr=[NSMUTABLEARRY];
//arrayWithCapacity:只是给出了一个关于阵列可能会变得多大的提示。它总是以
//尺寸为0。

对于(int i=0;i而言,基本区别在于不能将对象添加到NSArray。
所以,如果你想有一个数组,你想在其中添加一个对象,你必须使用NSMutable数组。

你不能像这样使用NSArray…那么我如何才能在运行时从用户那里接受NSArray中的值???嘿,Jeremy,谢谢你发布的答案,它帮了我很多忙,但我只是想问你,这是他们的任何方法,我们可以使用NSArray接受值吗从运行时的用户处获取否。您需要以类似于上面示例的方式使用NSMutableArray-您不能向NSArray添加新元素。但是,还有其他方法可以从输入中获取整数,例如使用NSScanner。NSArray不允许添加和删除项吗?它不允许。您可以使用NSMutableArray添加和删除项。