[self performSelector:@selector(stopPulling) withObject:nil afterDelay:0.01];
代码很好。我只是认为使用NSOperation和block应该是未来的发展方向。
我熟悉NSOperation。我只想用block和NSOperation做同样的事情。
我可以用GCD做到这一点:
int64_t delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
<#code to be executed on the main queue after delay#>
});
拜托。在NCD操作中,有些事情可以在GCD中完成吗?
答案 0 :(得分:1)
我最终做到了这一点:
#import "BGPerformDelayedBlock.h"
@implementation BGPerformDelayedBlock
+ (void)performDelayedBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay
{
int64_t delta = (int64_t)(1.0e9 * delay);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delta), dispatch_get_main_queue(), block);
}
+(void)performSlightlyDelayedBlock:(void (^)(void))block
{
[self performDelayedBlock:block afterDelay:.1];
}
@end
它基于How do you trigger a block after a delay, like -performSelector:withObject:afterDelay:?
中的答案我认为它不应该是一个类别。
奇怪我最终使用了GCD。
然而,使用它很简单。我只是这样做:
[BGPerformDelayedBlock performSlightlyDelayedBlock:^{
[UIView animateWithDuration:.3 animations:^{
[self snapToTheTopOfTheNonHeaderView];
}];
}];
答案 1 :(得分:1)
NSOperationQueue不提供延迟执行的机制。使用GCD或NSTimer。
答案 2 :(得分:0)
您的代码类似于,使用NSTimer
设置选择器0.01秒后没有重复。这将在主线程上调用。
NSOperation
或块用于在后台执行操作。您可以使用这些代替performSelectorInBackground
。
如果您需要在后台工作,那就去吧。有很多教程可以学习'NSOperation using 'NSOperationQueue
和块。