Objective c 目标C创建自定义数组

Objective c 目标C创建自定义数组,objective-c,arrays,memory-management,Objective C,Arrays,Memory Management,在其他语言中,我可以创建一个类,然后使用它在该类中创建一个对象数组,例如class price,它在性能类中用于定义price[]prices 在目标C中,我无法实现这一目标,你是如何做到的 price类是NSObject的继承,我可以使用NSMutableArray吗?是的,NSMutableArray是您想要使用的。是的,NSMutableArray是您想要使用的。首先回答最后一个问题:如果您存储的是Objective-C对象的实例,正如您所说,它继承自NSObject,那么是的,使用NSM

在其他语言中,我可以创建一个类,然后使用它在该类中创建一个对象数组,例如class price,它在性能类中用于定义price[]prices

在目标C中,我无法实现这一目标,你是如何做到的


price类是NSObject的继承,我可以使用NSMutableArray吗?

是的,NSMutableArray是您想要使用的。

是的,NSMutableArray是您想要使用的。

首先回答最后一个问题:如果您存储的是Objective-C对象的实例,正如您所说,它继承自NSObject,那么是的,使用NSMutableArray。但是,这不适用于int、BOOL、char、char*等基本类型

Objective-C使用C方式声明数组,但有一个警告:不能在堆栈上分配内存,这是C中所做的,只能在堆上分配内存。这意味着您必须在Leopard或更高版本上使用malloc Prefere,并免费管理内存。此外,还可以将数组声明为指向一个或多个指针的指针。类似这样的东西:注意:从稀薄的空气中提取,未经测试

Price **prices = malloc(numberOfEntries * sizeof(Price*));
...
free(prices);

使用NSMutableArray通常比管理自己的阵列容易得多。请注意内存管理规则:集合在插入对象时调用-retain,在删除对象时调用-release,或者在释放集合时调用-release。

首先回答您的最后一个问题:如果您存储的是Objective-C对象的实例,正如您所说,它继承自NSObject,那么是,使用NSMutableArray。但是,这不适用于int、BOOL、char、char*等基本类型

Objective-C使用C方式声明数组,但有一个警告:不能在堆栈上分配内存,这是C中所做的,只能在堆上分配内存。这意味着您必须在Leopard或更高版本上使用malloc Prefere,并免费管理内存。此外,还可以将数组声明为指向一个或多个指针的指针。类似这样的东西:注意:从稀薄的空气中提取,未经测试

Price **prices = malloc(numberOfEntries * sizeof(Price*));
...
free(prices);

使用NSMutableArray通常比管理自己的阵列容易得多。请注意内存管理规则:集合在插入对象时调用-retain,在删除对象时调用-release,或者在取消分配集合时调用-release。

如果您有一个类价格,并且它继承自NSObject,则可以将它们的数组存储在NSArray或NSMutableArray中。您也可以将它们存储在C数组或STL向量中,尽管在这些情况下内存管理语义可能很困难

对于NSArray/NSMutableArray,该数组获取对象的所有权引用,因此您可以在将其添加到数组中后释放该对象,并且该对象将保留在内存中,直到从数组和所有其他位置删除为止

代码可能如下所示:

NSMutableArray* a = [NSMutableArray array];
[a addObject:[Price price]];
// and/or
[a addObject:[[[Price alloc] init] autorelease];
// and/or
Price* p = [[Price alloc] init];
[a addObject:p];
[p release];
NSLog( @"The array is %@", a );
// Remember at this point you do not "own" a, retain it if you want to keep it, or use [NSMutableArray new] above

发布时,它包含的所有Price对象都将被发布并可能被释放。

如果您有一个类Price,并且它继承自NSObject,那么您可以将它们的数组存储在NSArray或NSMutableArray中。您也可以将它们存储在C数组或STL向量中,尽管在这些情况下内存管理语义可能很困难

对于NSArray/NSMutableArray,该数组获取对象的所有权引用,因此您可以在将其添加到数组中后释放该对象,并且该对象将保留在内存中,直到从数组和所有其他位置删除为止

代码可能如下所示:

NSMutableArray* a = [NSMutableArray array];
[a addObject:[Price price]];
// and/or
[a addObject:[[[Price alloc] init] autorelease];
// and/or
Price* p = [[Price alloc] init];
[a addObject:p];
[p release];
NSLog( @"The array is %@", a );
// Remember at this point you do not "own" a, retain it if you want to keep it, or use [NSMutableArray new] above

发布时,它包含的所有Price对象都将被发布并可能被释放。

我不太确定您的要求是什么。。。你能重新措辞吗?你是说你想要一个price类的实例数组,还是一个作为price类的ivar的NSArray。。。还是别的什么?你到底想做什么你做不到的事情?你说你可以创建一个自定义数组?用其他语言。和C一样?如果是C/C++的话,你能不能给我一个简单的例子,说明你会怎么做,并澄清你的问题,因为正如我之前所说的,我不太确定你在问什么。我不太确定你在问什么。。。你能重新措辞吗?你是说你想要一个price类的实例数组,还是一个作为price类的ivar的NSArray。。。还是别的什么?你到底想做什么你做不到的事情?你说你可以创建一个自定义数组?用其他语言。和C一样?如果是C/C++的话,你能不能给我一个简单的例子,说明你在那里是怎么做的,并澄清你的问题,因为正如我前面所说的,我不太清楚你在问什么。