метод класса, где self используется внутри блока

У меня есть метод класса, который использует 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в этом случае, но я хотел узнать, что вы, ребята, думаете.

7
задан Kazuki Sakamoto 16 June 2012 в 01:36
поделиться