【问题标题】:How to append values to an array in Objective-C如何在 Objective-C 中将值附加到数组
【发布时间】:2010-09-13 06:11:41
【问题描述】:

我正在这样做:

for(int i=0;i>count;i++)
{
    NSArray *temp=[[NSArray alloc]initWIthObjects]i,nil];
    NSLog(@"%i",temp);
}

它返回给我 0,1,2,3.... 一个一个计数,但我想要一个附加这些值 {0,1,2,3,4,5...} 的数组。 这没什么大不了的,但我找不到它。我是 iPhone 新手。

【问题讨论】:

  • 不要使用 br 标签。使用“101010”按钮格式化代码。

标签: objective-c nsmutablearray


【解决方案1】:
NSMutableArray *myArray = [NSMutableArray array];

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

NSLog(@"myArray:\n%@", myArray);

【讨论】:

  • 之后一定要释放NSMutableArray
  • for 循环中应该是i &lt; count。但是您只是从@user440485 的原件中复制了它。
【解决方案2】:

由于以下几个原因,此代码没有执行您希望它执行的操作:

  1. NSArray 不是一个“可变”类,这意味着它不是为了在创建后进行修改而设计的。可变版本是NSMutableArray,它允许您附加值。

  2. 您不能将int 之类的原语添加到NSArrayNSMutableArray 类;他们只持有物体。 NSNumber 类就是为这种情况而设计的。

  3. 每次分配数组时都会发生内存泄漏。始终将每次调用 alloc 与匹配调用 releaseautorelease 配对。

你想要的代码是这样的:

NSMutableArray* array = [[NSMutableArray alloc] init];
for (int i = 0; i < count; i++)
{
    NSNumber* number = [NSNumber numberWithInt:i]; // <-- autoreleased, so you don't need to release it yourself
    [array addObject:number];
    NSLog(@"%i", i);
}
...
[array release]; // Don't forget to release the object after you're done with it

我对您的建议是阅读Cocoa Fundamentals Guide 以了解一些基础知识。

【讨论】:

  • 在 ARC 下,编译器会自动插入必要的保留和释放调用。所以就做array = nil;
【解决方案3】:

你可以做的更短的方法是:

NSMutableArray *myArray = [NSMutableArray array];

for(int i = 0; i < 10; i++) {

   [myArray addObject:@(i)];
}

NSLog(@"myArray:\n%@", myArray);

【讨论】:

    猜你喜欢
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2018-08-14
    相关资源
    最近更新 更多