我制作了一个自定义指示器,在其中我可以通过一个块运行代码并在代码运行时显示一个指示器。
代码完成后,我调用第二个成功块并隐藏/删除指示器。
因为我不想在我想使用它们的类中实例化每个指标,所以指标对象是一个单例。
工作流程:
- 创建指标
- 显示指标
- 运行代码块
- 运行成功块
- 隐藏指示器
- 从超级视图中删除
- 取消共享实例
当我使用两个指标时出现问题(例如:登录后,刷新数据)。
当显示第二个指标时,在第一个实例上调用 hide 方法。在第二个指标期间,指标视图从超级视图中移除。
我没有管理自己的线程锁的经验,但我想通过使用解决问题,@synchronized(self)
但似乎没有效果?
+ (Indicator *)create
{
if (!sharedIndicator)
{
sharedIndicator = [[Indicator alloc] initWithNibName:@"Indicator" bundle:nil];
}
return sharedIndicator;
}
+ (Indicator *)createWithDelegate:(id <IndicatorDelegate>)delegate
message:(NSString *)message
inView:(UIView *)parentView
{
Indicator *indicator = [Indicator create];
[indicator setDelegate:delegate];
[indicator setMessage:message];
[indicator setParentView:parentView];
return indicator;
}
+ (void)showInView:(UIView *)view
withMessage:(NSString *)message
execute:(BOOL (^)(void))executeBlock
complete:(void (^)(BOOL success))completed
{
Indicator *indicator = [Indicator createWithDelegate:nil message:message inView:view];
[indicator show];
__block BOOL success = NO;
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
{
success = executeBlock();
dispatch_async(dispatch_get_main_queue(), ^
{
completed(success);
[indicator hide];
});
});
}