Blocks Programming Helper ↗ Blocks in System APIs

earlyMorning發表於2018-01-12

系統框架中越來越多的方法和函式,使用 Block 作為引數。
Block 在系統框架中使用的案例包括:

  • 完成處理器
  • 通知處理器
  • 檢視動畫
  • 列舉器
  • 比較器
  • 並行任務

完成處理器

//declare
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;
//completion 被呼叫當動畫完成時,有一個引數沒有返回值。

//invoke
[UIView transitionFromView:fromv toView:tov duration:dur options:opt completion:^(BOOL finished) {
    //code
}];

通知處理器

//declare
- (id<NSObject>)addObserverForName:(NSNotificationName)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block;
//block 被呼叫當收到通知時,有一個引數沒有返回值。

//invoke
[ncd addObserverForName:ntfn object:nil queue:quu usingBlock:^(NSNotification *ntf) {
    //code
}];

檢視動畫

//declare
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations;
//animations 被呼叫在封裝動畫時,沒有引數沒有返回值。

//invoke
[UIView animateWithDuration:dur animations:^{
    //code
}];

列舉器

//declare
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block;
//block 被呼叫當遍歷元素時,有三個引數沒有返回值。

//invoke
[ary enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    //code
}];

比較器

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
//declare
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmp;
//cmp 被呼叫當比較元素時,有二個引數一個返回值。

//invoke
[ary sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    //code
}];

並行任務

//操作佇列
//declare
- (void)addOperationWithBlock:(void (^)(void))block;
//block 被新增到佇列等待被呼叫,沒有引數沒有返回值。

//invoke
[quu addOperationWithBlock:^{
    //code
}];

//排程佇列
typedef void (^dispatch_block_t)(void);
//declare
void dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
//block 被新增到佇列等待被呼叫,沒有引數沒有返回值。

//invoke
dispatch_sync(quu, ^{
    //code
});

相關文章