我可以声明NSMutableArray
或NSArray
,但我想声明类数组。假设用户是一个类,所以我可以将数组声明为:
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对象。
答案 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];
}