iPhone - переменные внутри методов внутри блоков - PullRequest
1 голос
/ 20 февраля 2011

мы знаем, что мы должны предварительно объявить переменную, используя __block, если мы хотим, чтобы блок мог ее изменить.Но что, если мы назовем блок как

dispatch_async(myQueue(), ^{
    [self doStuff];
});

, подчиняется ли код внутри doStuff этому правилу?Представьте, что doStuff использует переменные или свойства, объявленные в .h.Нужно ли объявлять эти переменные / свойства с помощью префикса __block?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2011

Я не думаю, что это сильно отличается.Я думаю, что мы можем использовать методы экземпляра и глобальные переменные, как мы используем их в обычных функциях.

Например:

 dispatch_async(dispatch_get_main_queue(), ^{
        liveImageView.image = image;
    if (image) {
        [self analyzeImage:image];
        currentImage = image; //here currentImage is a global variable, declared in .h
    }
    mod++;
    [image release];
});
2 голосов
/ 20 февраля 2011

Вам не нужно использовать префикс __block в любой переменной экземпляра для вызова этого метода, поскольку переменные, используемые в методе, не имеют ничего общего с блоком. Это просто вызов метода.

Но помните, что блок сохранит self.

...