Я создаю одиночку, как показано ниже:Создает ли [self new] в блоке сильный ссылочный цикл?
static MyType* shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [self new];
});
return shared;
Я знаю, что код в блоке будет выполняться один раз и self
будет nil
в этой точке, так [self new]
будет равен [MyType new]
. Но потом я думал о ситуации, когда я вызываю [self new]
в блок, который не предназначен для однотонных целей и может быть вызван более одного раза.
Будет [self new]
действовать как [MyType new]
или блок будет захватывать self
? Правильно ли создать новый экземпляр MyType
с использованием [self new]
? Каковы преимущества использования [self new]
вместо [MyType new]
?
при вызове самостоятельного новый] вне вашего одноточечного метода инициализации, вы создаете новый экземпляр. Нет смысла создавать singleton, если вы хотите называть [self new] вне его. –
@TejaNandamuri вопрос: «Делает ли блок, который использует [self new] в нем, будет захватывать себя?», Извините, если это не выяснено. – WantToKnow
Нет, сильная ссылка не будет создана, если вы не назовете этот блок, используя self. И вы должны использовать слабый, если хотите называть себя в блоке. Лучше всего это можно найти здесь http://stackoverflow.com/questions/20030873/always-pass-weak-reference-of-self-into-block-in-arc –