Авто-релиз в Objective C и удобных методах
Поэтому я немного запутался, когда объекты автоматически высвобождаются. Я до сих пор понимаю, что если я не "владелец", это будет так. Но в каких случаях я не был бы владельцем? Когда я создаю объект, используя удобный метод? Я не понимаю, откуда взялись все эти удобные методы и как бы вы их создали.
1 ответ
Вы обычно используете alloc
+ инициализатор для создания объектов, которые не будут автоматически освобождены. Вместо этого вы используете статические методы для получения автоматически выпущенных экземпляров. Пример:
NSString* string1;
NSString* string2;
@autoreleasepool{
string1= [NSString stringWithString: @"Hello"];
string2= [[NSString alloc] initWithString: @"Hello"];
}
// string1 isn't alive, string2 is alive
Также необходимо обратить внимание на синглтоны. В случае синглетонов они не выпускаются автоматически, но вы не являетесь их владельцем. Часто из названия метода вы понимаете, возвращает ли он синглтон или нет (например, что-то вроде sharedInstance
или же mainThread
).