Вопрос по ios, objective-c – Вложенные блоки и ссылки на себя

6

У меня есть блок, в котором я используюself поэтому я объявляю слабую ссылку на себя:

__weak MyClass *weakSelf = self;

Теперь мои вопросы:

I get an error where I define weakSelf and I don't understand what this should mean.:

weak attribute can not be specified on an automatic variable

Inside my block I pass weakSelf to another block and I am not sure if I now have to do the same thing again like so:

__weak MyClass *weakWeakSelf = weakSelf;

And then pass weakWeakSelf to that block?

Вы уже нашли ответ на этот вопрос? Я имею в виду слабую слабую часть. Enzo Tran

Ваш Ответ

3   ответа
8

это происходит, когда вы ориентируетесь на iOS 4. Вы должны изменить его на

__unsafe_unretained MyClass *weakWeakSelf = weakSelf;
Error: User Rate Limit ExceededDeployment targetError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Besi
Error: User Rate Limit Exceeded Besi
1

libextobjc это будет читабельно и легко:

- (void)doStuff
{
    @weakify(self); 
    // __weak __typeof__(self) self_weak_ = self;

    [self doSomeAsyncStuff:^{

        @strongify(self);
        // __strong __typeof__(self) self = self_weak_;

        // now you don't run the risk of self being deallocated
        // whilst doing stuff inside this block 
        // But there's a chance that self was already deallocated, so
        // you could want to check if self == nil

        [self doSomeAwesomeStuff];

        [self doSomeOtherAsyncStuff:^{

            @strongify(self);
            // __strong __typeof__(self) self = self_weak_;

            // now you don't run the risk of self being deallocated
            // whilst doing stuff inside this block 
            // Again, there's a chance that self was already deallocated, so
            // you could want to check if self == nil

            [self doSomeAwesomeStuff];

        }];
    }];
}
3

With ARC

Wihtout ARC

__unsafe_unretained __typeof__(self) wself = self;

Похожие вопросы