我的問題是,我使用dispatch_async(dispatch_get_main_queue(), ^(void) { ... });
異步調用方法,在這種方法取決於一些條件我設置一個布爾值YES
。當用這種方法讀取這個布爾值時,它的總是用讀取它的舊值,即NO
。從GCD線程讀舊值
奇怪的是,當我在布爾檢查的行上做了一個斷點時,一切都很順利!
編輯: 這裏就是線程派生
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self drawFaceBoxesForFeatures:features forVideoBox:claporientation:curDeviceOrientation image:img];
});
代碼
- (void)drawFaceBoxesForFeatures:(NSArray *)features forVideoBox:(CGRect)clap orientation: (UIDeviceOrientation)orientation image:(UIImage *)image;
{
if (![self getSendingRequestStatus]) {
NSLog(@"Sending req");
// send async request
dispatch_async(dispatch_get_main_queue(),^ {
sendingRequest = YES;
});
}
}
您使用的是LLDB還是GDB? – larsacus 2012-04-16 21:17:22
是否在塊內創建了布爾值? – 2012-04-16 21:19:58
當運行時遇到調度調用時,它會在該時間點拍攝所有相關對象/變量的快照。因此,即使稍後執行調度調用,它也會以調用時的狀態訪問變量。 – 2012-04-16 21:20:23