CYLDeallocBlockExecutor icon indicating copy to clipboard operation
CYLDeallocBlockExecutor copied to clipboard

identifier设计的目的,如何才能移除对应的block,什么场景?

Open FastGitHub opened this issue 6 years ago • 1 comments

你把identifier设计在内部,确把API identifier作为参数暴露在外边,你希望外界给你传什么值呢?传什么值才能移除对应的block?

FastGitHub avatar Mar 22 '18 10:03 FastGitHub

在添加block时identifier会作为返回值返回,可以借助这个返回值来取消特定任务,

在v1.3.0版本后,所有的block会按照添加的顺序也就是identifier的顺序(从1递增)执行,你可以按照这个规则,根据identifier的大小,取消后续的任务。 demo里也有演示:

   @autoreleasepool {
       id object = [NSObject new];
       // Add task
       NSUInteger identifier1 = [object cyl_willDeallocWithSelfCallback:^(__unsafe_unretained id object, NSUInteger identifier) {
           [self showInfo:[NSString stringWithFormat:@"Object: %@ dealloc. Task: %ld", object, (unsigned long)identifier]];
       }];
       [self showInfo:[NSString stringWithFormat:@"Object: %@ created. Task: %ld", object, (unsigned long)identifier1]];
       
       // Add task
       NSUInteger identifier2 = [object cyl_willDeallocWithSelfCallback:^(__unsafe_unretained id object, NSUInteger identifier) {
           [self showInfo:[NSString stringWithFormat:@"Object: %@ dealloc. Task: %ld", object, (unsigned long)identifier]];
       }];
       [self showInfo:[NSString stringWithFormat:@"Object: %@ created. Task: %ld", object, (unsigned long)identifier2]];
       
       // Add task
       NSUInteger identifier3 = [object cyl_willDeallocWithSelfCallback:^(__unsafe_unretained id object, NSUInteger identifier) {
           [self showInfo:[NSString stringWithFormat:@"Object: %@ dealloc. Task: %ld", object, (unsigned long)identifier]];
       }];
       [self showInfo:[NSString stringWithFormat:@"Object: %@ created. Task: %ld", object, (unsigned long)identifier3]];
       
       // Remove task
       [self showInfo:[NSString stringWithFormat:@"Object: %@ remove. Task: %ld", object, (unsigned long)identifier1]];
       [object cyl_cancelDeallocCallbackWithIdentifier:identifier1];
   }

代码输出为:

Simulator Screen Shot - iPhone Xʀ - 2019-05-31 at 03 44 19

2019-05-31 03:43:25.570759+0800 CYLDeallocBlockExecutor[35538:10597032] 🔴类名与方法名:-[ViewController showInfo:](在第103行),tag:1802850987, 描述:Object: <NSObject: 0x600001decea0> created. Task: 1
2019-05-31 03:43:25.570973+0800 CYLDeallocBlockExecutor[35538:10597032] 🔴类名与方法名:-[ViewController showInfo:](在第103行),tag:773929028, 描述:Object: <NSObject: 0x600001decea0> created. Task: 2
2019-05-31 03:43:25.571143+0800 CYLDeallocBlockExecutor[35538:10597032] 🔴类名与方法名:-[ViewController showInfo:](在第103行),tag:1309092471, 描述:Object: <NSObject: 0x600001decea0> created. Task: 3
2019-05-31 03:43:25.571278+0800 CYLDeallocBlockExecutor[35538:10597032] 🔴类名与方法名:-[ViewController showInfo:](在第103行),tag:1187976465, 描述:Object: <NSObject: 0x600001decea0> remove. Task: 1
2019-05-31 03:43:25.571474+0800 CYLDeallocBlockExecutor[35538:10597032] 🔴类名与方法名:-[ViewController showInfo:](在第103行),tag:1730767963, 描述:Object: <NSObject: 0x600001decea0> dealloc. Task: 2
2019-05-31 03:43:25.571625+0800 CYLDeallocBlockExecutor[35538:10597032] 🔴类名与方法名:-[ViewController showInfo:](在第103行),tag:2469748936, 描述:Object: <NSObject: 0x600001decea0> dealloc. Task: 3

ChenYilong avatar May 30 '19 19:05 ChenYilong