У меня есть метод класса, который использует dispatch_once
для создания статический объект. Внутри блока dispatch_once
я использую [self class]
и задаюсь вопросом, нужно ли мне использовать слабую ссылку на self
, чтобы избежать цикла сохранения?
+ (NSArray *)accountNames{
static NSArray *names = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
names = [[[self class] accounts] allKeys];
names = [names sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
});
return names;
}
Если я использую слабую ссылку на self
, я получаю предупреждение:
+ (NSArray *)accountNames{
static NSArray *names = nil;
static dispatch_once_t predicate;
__weak TUAccount *wself = self;
dispatch_once(&predicate, ^{
names = [[[wself class] accounts] allKeys];
names = [names sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
});
return names;
}
Несовместимые типы указателей, инициализирующие 'TUAccount *__weak' выражением типа 'const Class'
Поскольку я получаю предупреждение Я не думаю, что мне нужно использовать слабую ссылку на self
в этом случае, но я хотел узнать, что вы, ребята, думаете.