2013-08-28 2 views
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; 
} 
+0

Все в порядке, просто не забудьте всегда называть self.array1 внутри класса, а не _array1. –

+0

Формы, подобные этому, не позволят установить значение 'nil' (и при чтении будет возвращено' nil'), что иногда может быть желательным. Определенно документируйте это поведение, если это будет публичный API! – Kitsune

ответ

1

Это и это не так. Леновый экземпляр отлично подходит как концепция, но вы должны быть осторожны. Например, если два разных потока пытаются получить доступ к любой из ваших переменных одновременно, вы можете получить две разные лениво-инстанцируемые переменные. Смотрите ответ здесь:

Thread safe lazy initialization on iOS

1

Doing отложенную загрузки для всех, может привести к замедлению выполнения пользовательского взаимодействия, потому что приложение может каждый сейчас и потом загружать материал в память получить занято. Используйте его только тогда, когда требуется (т. Е. Когда объект требует много памяти для полной загрузки ..)

Смежные вопросы