在OC中^操作符是用来声明一个block变量,^也是标示着一段block文字的开始。block的实体包含在{}中。
通常用在函数参数中,通过代码块来返回参数需要的值,如:waitForEqualExpected,equalWithBool的第一个参数需要通过一段代码块if (actual==expected){…}来返回一个值。
一般也用在同步或者异常的执行函数中。
(BOOL)waitForEqualExpected:(BOOL(^)(void))equal expected:(BOOL)expected timeout:(double)timeout interval:(double)interval{
NSDate *begin_time = [[NSDate alloc] init];
while (true) {
NSDate *current_time = [[NSDate alloc] init];
if (expected == equal()) {
return true;
};
if(timeout <= 0 || [current_time timeIntervalSince1970] - [begin_time timeIntervalSince1970] > timeout){
break;
};
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow: interval]];
};
return false;
};
(BOOL)equalWithBool:(BOOL&)actual expected:(BOOL&)expected timeout:(double)timeout interval:(double)interval{
return [self waitForEqualExpected:^BOOL(){
if (actual==expected) {
return true;
};
return false;
} expected:true timeout:timeout interval:interval];
};