CYLDeallocBlockExecutor
CYLDeallocBlockExecutor copied to clipboard
identifier设计的目的,如何才能移除对应的block,什么场景?
你把identifier设计在内部,确把API identifier作为参数暴露在外边,你希望外界给你传什么值呢?传什么值才能移除对应的block?
在添加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];
}
代码输出为:
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