3

我发现自己现在懒惰地初始化所有功能。它只是感觉更自然,它允许我停止编写设置函数。这是设计不好的吗?有哪些陷阱?

@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;
}
4

2 回答 2

1

它是,它不是。惰性实例化作为一个概念很好,但你必须小心。例如,如果两个不同的线程试图同时访问您的任何一个变量,您最终可能会得到两个不同的延迟实例化变量。在这里查看答案:

iOS上的线程安全延迟初始化

于 2013-08-28T11:32:03.723 回答
1

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

于 2013-08-28T11:56:39.683 回答