首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用NSMutableArray分配数组大小吗?

我可以使用NSMutableArray分配数组大小吗?
EN

Stack Overflow用户
提问于 2010-04-06 12:53:14
回答 8查看 20.5K关注 0票数 4

我曾经是一名Java程序员,数组需要在第一次声明时声明,如下所示:

代码语言:javascript
复制
int[] anArray;              // declares an array of integers
anArray = new int[10];      // allocates memory for 10 integers

我不知道Objective C,NSMutableArray是否也给了我这个能力。实际上,我想做一个10*10的数组。在太赫兹之前。我试着这样做:

代码语言:javascript
复制
myArray = [[NSMutableArray alloc] initWithCapacity:10]; 

for (int i=0; i<10; i++) {
    myArray[i] = [[NSMutableArray alloc] initWithCapacity:10]; 
}

但是它发生了错误,告诉我不兼容的类型赋值。

EN

回答 8

Stack Overflow用户

发布于 2010-04-06 14:24:48

  1. 容量字段很少有用。阵列将按需扩展。
  2. 和capacity字段只会告诉阵列您可以使用多少内存。数组的长度仍然是0。
  3. ,但您可以从空开始增加数组:

for (int i= 0;i< 10;++ i) myArray addObject:…;

  • 要读写NSMutableArray中的元素,您需要:

id x= array objectAtIndex:i;// x= arrayi;array replaceObjectAtIndex:i withObject:y;// arrayi = y;

您不能直接为NSArray下标。

  • 您的代码有内存泄漏。与Java不同,ObjC不使用GC,除非您显式启用它(而iPhoneOS上的ObjC没有GC)。ObjC通过手动引用计数来管理内存。基本上,你需要确保你不拥有的东西的引用数量在这个过程中不会改变。详细信息请参见http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

在您的例子中,[[NSMutableArray alloc] …];创建了一个引用计数为+1的对象,然后赋值将接管数组,这意味着您不再拥有它,但是引用计数没有平衡到0,所以这个内存将不会被正确释放。您需要使用方便的方法(如[NSMutableArray array…] )创建引用计数为0的对象。

  • NSArray的只能存储ObjC对象。C中的int (ObjC)是一个原语,不能存储到NSArray中。你必须用[NSNumber numberWithInt:0]把它装箱成一个NSNumber。你可以用-intValue.

  • To来取回整数,你的代码需要修改如下:

-( NSMutableArray* )get10x10Array { NSMutableArray* arr = NSMutableArray数组;for (int i= 0;i< 10;++ i) { NSMutableArray * subarr =NSMutableArray数组;for (int j= 0;j< 10;++ j) [subarr addObject:NSNumber numberWithInt:0];arr addObject:subarr;} return arr;}

  • 但ObjC是C的超集。

int arr10;

票数 10
EN

Stack Overflow用户

发布于 2010-04-06 13:15:16

您想要一个10x10的数组--什么数组?

代码语言:javascript
复制
myArray = [[NSMutableArray alloc] initWithCapacity:10]; 

for (int i=0; i<10; i++) {
    myArray[i] = [[NSMutableArray alloc] initWithCapacity:10]; 
}

,但它发生错误,告诉我不兼容的类型赋值。

因为你不能像那样赋值给myArraymyArray是一个表示数组数据结构的对象。它是而不是一个C数组。

如果您想要一个原始数据类型的10x10数组,可以像在C:

代码语言:javascript
复制
int myArray[10][10];
票数 1
EN

Stack Overflow用户

发布于 2010-04-06 13:01:17

你需要NSMutableArray +arrayWithCapacity:

请注意,设置初始容量只是一种优化-可变数组根据需要进行扩展。

编辑:要做10x10的情况,

代码语言:javascript
复制
myArray = [[NSMutableArray alloc] initWithCapacity:10]; 

for (int i=0; i<10; i++) {
    NSMutableArray *subArray = [NSMutableArray arrayWithCapacity:10];
    [myArray addObject:subArray];
    for (int j = 0; j<10; j++) {
          [subArray addObject:[NSNumber numberWithInt:0]];
    }
}

备注:

数组下标保留了添加到数组中的对象,因此没有必要保留可以添加到数组中的下标对象(而不是像“subArray

  • only”这样的基本类型)。因此,NSNumber numberWithInt:

  • you需要使用objectAtIndex:replaceObjectAtIndex:withObject:等方法从下标中获取/设置值,而不是数组下标([])语法

请参阅NSArrayNSMutableArray的苹果参考资料

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2582699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档