期望的结果是在NSArray中构建10列。以下内容适用于所需的结果。
但我在这里玩火吗?
NSArray **ppp;
int m=10;
ppp = calloc(m, sizeof(NSArray));
ppp[0]=[[NSArray alloc] initWithObjects:
@"1",
@"2",
@"3",
];
ppp[1]=[[NSArray alloc] initWithObjects:
@"a1",
@"b2",
@"c3",
@"d4",
nil
];
NSLog(@"array test: %@ %@", [ppp[1] objectAtIndex:3], [ppp[0] objectAtIndex:2]);
感谢
答案 0 :(得分:3)
如果您打算这样做,
ppp = calloc(m, sizeof(NSArray *));
但采用此路径将涉及阵列数组的手动内存管理。为什么不使用NSMutableArray
实例。
NSMutableArray * masterArray = [NSMutableArray array];
[masterArray addObject:[[NSArray alloc] initWithObjects:
@"1",
@"2",
@"3",
]];
.....
NSLog(@"array test: %@ ", [[masterArray objectAtIndex:1] objectAtIndex:3]);
答案 1 :(得分:3)
它应该是sizeof(id)
,否则它是正确的代码。但是那里存在一些“爆炸”的可能性,因为它会使内存管理变得更加复杂并且容易出错,因此使用NSArray(因为C阵列完全不了解Objective-C的内存管理要求)。除非你已经分析并发现它是必要的,否则我会质疑这一点。
答案 2 :(得分:1)
你的calloc是错的。如果你想要一个包含10个NSArray对象的缓冲区,请执行:
NSArray** ppp;
int m = 10;
ppp = calloc(m, sizeof(NSArray*));
...
问题是某些体系结构上的sizeof(int)!= sizeof(id)。你自己做短片,你会粉碎你的堆,当你写完你的数组结束时你会遇到malloc异常。此外,很难找到错误。
我同意InsertWittyName:只需制作NSArray的NSArray。它更容易,更安全。