diff --git a/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/Function/DoraemonNSLogManager.h b/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/Function/DoraemonNSLogManager.h index dfd2ff56a..207dcdd87 100644 --- a/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/Function/DoraemonNSLogManager.h +++ b/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/Function/DoraemonNSLogManager.h @@ -13,11 +13,14 @@ + (instancetype)sharedInstance; -@property (nonatomic, strong) NSMutableArray *dataArray; - - (void)startNSLogMonitor; - (void)stopNSLogMonitor; - (void)addNSLog:(NSString *)log; + +- (NSArray *)readLogs; +- (void)clearLogs; + @end + diff --git a/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/Function/DoraemonNSLogManager.m b/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/Function/DoraemonNSLogManager.m index 37f3b6eff..b1b6adf67 100644 --- a/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/Function/DoraemonNSLogManager.m +++ b/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/Function/DoraemonNSLogManager.m @@ -25,6 +25,10 @@ void myNSLog(NSString *format, ...){ old_nslog(@"%@",str); } +@interface DoraemonNSLogManager() +@property (nonatomic, strong) NSMutableArray *dataArray; +@property (nonatomic, strong) dispatch_queue_t logQueue; +@end @implementation DoraemonNSLogManager @@ -39,6 +43,7 @@ + (instancetype)sharedInstance { } - (void)startNSLogMonitor{ + self.logQueue = dispatch_queue_create("dokit.log.queue", DISPATCH_QUEUE_SERIAL); doraemon_rebind_symbols((struct doraemon_rebinding[1]){"NSLog", (void *)myNSLog, (void **)&old_nslog},1); } @@ -47,14 +52,16 @@ - (void)stopNSLogMonitor{ } - (void)addNSLog:(NSString *)log{ - DoraemonNSLogModel *model = [[DoraemonNSLogModel alloc] init]; - model.content = log; - model.timeInterval = [[NSDate date] timeIntervalSince1970]; - - if (!_dataArray) { - _dataArray = [[NSMutableArray alloc] init]; - } - [_dataArray addObject:model]; + dispatch_sync(self.logQueue, ^{ + DoraemonNSLogModel *model = [[DoraemonNSLogModel alloc] init]; + model.content = log; + model.timeInterval = [[NSDate date] timeIntervalSince1970]; + + if (!_dataArray) { + _dataArray = [[NSMutableArray alloc] init]; + } + [_dataArray addObject:model]; + }); // return; // if (@available(iOS 13.0, *)) { @@ -66,4 +73,15 @@ - (void)addNSLog:(NSString *)log{ } +- (NSArray *)readLogs { + NSArray *array = [_dataArray copy]; + return array; +} + +- (void)clearLogs { + dispatch_sync(self.logQueue, ^{ + [self.dataArray removeAllObjects]; + }); +} + @end diff --git a/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/List/DoraemonNSLogListViewController.m b/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/List/DoraemonNSLogListViewController.m index d27f68955..212a236aa 100644 --- a/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/List/DoraemonNSLogListViewController.m +++ b/iOS/DoraemonKit/Src/Core/Plugin/Common/NSLog/List/DoraemonNSLogListViewController.m @@ -33,8 +33,8 @@ - (void)viewDidLoad { [self setRightNavBarItems:@[model1,model2]]; //按照时间倒序排列 - self.dataArray = [[[DoraemonNSLogManager sharedInstance].dataArray reverseObjectEnumerator] allObjects]; - + NSArray *logs = [[DoraemonNSLogManager sharedInstance] readLogs]; + self.dataArray = [[logs reverseObjectEnumerator] allObjects]; _searchView = [[DoraemonNSLogSearchView alloc] initWithFrame:CGRectMake(kDoraemonSizeFrom750_Landscape(32), IPHONE_NAVIGATIONBAR_HEIGHT+kDoraemonSizeFrom750_Landscape(32), self.view.doraemon_width-2*kDoraemonSizeFrom750_Landscape(32), kDoraemonSizeFrom750_Landscape(100))]; _searchView.delegate = self; @@ -49,13 +49,13 @@ - (void)viewDidLoad { } - (void)clear { - [[DoraemonNSLogManager sharedInstance].dataArray removeAllObjects]; + [[DoraemonNSLogManager sharedInstance] clearLogs]; self.dataArray = [[NSArray alloc] init]; [self.tableView reloadData]; } - (void)export { - NSArray *dataArray = [[DoraemonNSLogManager sharedInstance].dataArray copy]; + NSArray *dataArray = [[DoraemonNSLogManager sharedInstance] readLogs]; NSMutableString *log = [[NSMutableString alloc] init]; for (DoraemonNSLogModel *model in dataArray) { NSString *time = [NSString stringWithFormat:@"[%@]",[DoraemonUtil dateFormatTimeInterval:model.timeInterval]]; @@ -128,7 +128,7 @@ - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEd #pragma mark - DoraemonNSLogSearchViewDelegate - (void)searchViewInputChange:(NSString *)text{ if (text.length > 0) { - NSArray *dataArray = [[[DoraemonNSLogManager sharedInstance].dataArray reverseObjectEnumerator] allObjects]; + NSArray *dataArray = [[[[DoraemonNSLogManager sharedInstance] readLogs] reverseObjectEnumerator] allObjects]; NSMutableArray *resultArray = [[NSMutableArray alloc] init]; for(DoraemonNSLogModel *model in dataArray){ NSString *content = model.content; @@ -138,7 +138,7 @@ - (void)searchViewInputChange:(NSString *)text{ } self.dataArray = [[NSArray alloc] initWithArray:resultArray]; }else{ - self.dataArray = [[[DoraemonNSLogManager sharedInstance].dataArray reverseObjectEnumerator] allObjects]; + self.dataArray = [[[[DoraemonNSLogManager sharedInstance] readLogs] reverseObjectEnumerator] allObjects]; } [self.tableView reloadData];