Alloc 1000000 NSObject最快的方式?

时间:2016-04-15 07:58:52

标签: objective-c performance

通常情况下,我们会以这种方式创建1000000 NSObject

NSMutableArray* objs = [[NSMutableArray alloc] initWithCapacity:1000000];
for (int i = 0; i < 1000000; i++) {
    MyObject* o = [[MyObject alloc] init];
    o.str = [NSString stringWithFormat:@"%d", i];
    [objs addObject:o];
}

但是,这可能会很慢。也许应该合并很多内存分配,或者还有其他一些技巧来加速它。

如何更有效地为数千NSObject分配空间?

增加: 使用 malloc 获取大量内存并重新启动它也是非法的。由于从普通内存转换为NSObject会因访问不良而失败。见下文: enter image description here

1 个答案:

答案 0 :(得分:2)

这个问题没有捷径可走。如果你需要分配100万个对象,那么由于消耗太多内存需要时间并且可能会失败。

鉴于这种限制,您需要考虑不同的解决方案。例如,如果这些对象中的每一个都代表一些,那么就有一个ItemManager对象可以根据需要管理这些项目。然后,经理类可以在中分配内存,而不是为单个项目分配内存,这样可以更好地执行并且更具可伸缩性。

但是,如果您没有准确解释这些对象所代表的内容,我无法提供更详细的替代方案。