如何在目标c中声明类数组

时间:2010-10-11 16:30:58

标签: objective-c

我可以声明NSMutableArrayNSArray,但我想声明类数组。假设用户是一个类,所以我可以将数组声明为:

user* obj[10];

它在Objective c中有效,但我不确定如何动态设置数组容量。我们通常使用MutableArray作为initWithCapacity:..

这就是我在上课时所做的:

user* objuser;
CustomOutput* output = [[CustomOutput alloc] init];
[objuser cutomSerialize:output];
NSMutableData* data = output.data;

但如果我有数组:

NSMutableArray* aryUserObj;

我无法从arryUserObj调用cutomSerialize方法。

我希望将所有userObj序列化为1并获取单个NSData对象。

2 个答案:

答案 0 :(得分:4)

序列化对象数组的标准方法是在encodeWithCoder:对象中定义initWithCoder:User

@interface User: NSObject {
 ....
}
-(void)encodeWithCoder:(NSCoder*)coder ;
-(id)initWithCoder:(NSCoder*)coder;
@end 

目前CustomSerialize中的内容应该是这些方法。

然后,如果要对对象进行编码,则执行

User* user=... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:user];

并解码它:

User* user=[NSKeyedUnarchiver unarchiveObjectWithData:data];

如果你有一个对象数组,

NSMutableArray* array=... ; // an array of users
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];

NSArray* array=[NSKeyedUnarchiver unarchiveObjectWithData:data];

自动完成对数组的迭代。 还要注意,你没有得到可变数组,它是一个不可变数组。

答案 1 :(得分:2)

NSMutableArray * users = [NSMutableArray array];
for (int i = 0; i < someNumber; ++i) {
  User * aUser = [[User alloc] initWithStuff:someStuff];
  [users addObject:aUser];
  [aUser release];
}