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

そうであり、そうではありません。遅延インスタンス化は概念としては問題ありませんが、注意が必要です。たとえば、2 つの異なるスレッドがいずれかの変数に同時にアクセスしようとすると、遅延インスタンス化された 2 つの異なる変数になる可能性があります。ここで答えを見てください:

iOS でのスレッドセーフな遅延初期化

于 2013-08-28T11:32:03.723 に答える