私はキューに提出するブロックを持っており、特定の条件が真であればブロックを実行したいだけです。それはこのようにソートのになります。コードブロック内の参照による変数の使用方法は?
bool hi = YES;
dispatch_async(queue, ^{
if (hi == YES)
do stuff;
});
これに伴う問題であり、そのブロックの後にブロックのNO外部へのハイテク変化の値は、キューにそれが実行される前に提出された場合には、ブロック内のhiの値はまだYESです。
私はドキュメントを見て、__blockディレクティブを見つけました。これは助けになるかもしれませんが、うまくいきませんでした。
__block bool hi = YES;
dispatch_async(queue, ^{
if (hi == YES)
do stuff;
});
と
bool hi = YES;
dispatch_async(queue, ^{
__block boolean hi2 = hi;
if (hi2 == YES)
do stuff;
});
をそして、それらのどちらも動作するようです:私が試してみました。
これを実行すると、期待通りに動作しますので、__blockディレクティブは参照を保持します。 BOOL b = YES; \tボイド(^ブロック)()= [[^ { \t \t IF(B == YES){ \t \t \tのNSLog(@ "B == YES")。 \t \t} else { \t \t \t NSLog(@ "b == NO"); \t \t} \t} autorelease]; \t b = NO; \t block(); – Mattia