是否可以延迟初始化/加载所有对象?

时间:2013-08-28 11:04:10

标签: ios objective-c lazy-loading

我现在懒得初始化我的所有功能。它感觉更自然,它允许我停止编写设置功能。这个设计不好吗?有什么陷阱?

@property (nonatomic, strong) NSMutableArray *array1;

-(NSMutableArray *)array1{
   if (!_array1){
       _array1 = [[NSMutableArray alloc] init];
   }
   return _array1;
}
然后我发现自己做的事情是:

-(NSMutableArray *)array1{
   if (!_array1){
       _array1 = [[NSMutableArray alloc] init];
       // read a file
       // [_array addObject:newObject];
   }
   return _array1;
}

2 个答案:

答案 0 :(得分:1)

它是,它不是。懒惰实例化作为一个概念很好,但你必须要小心。例如,如果两个不同的线程同时尝试访问您的任何一个变量,您最终可能会有两个不同的懒惰实例化变量。请参阅答案:

Thread safe lazy initialization on iOS

答案 1 :(得分:1)

对所有内容进行延迟加载可能会导致运行时用户交互速度变慢,因为应用程序可能会偶尔忙于将内容加载到内存中。仅在需要时使用它(即当一个对象需要大量内存才能完全加载时。)