gpt4 book ai didi

iphone - AFNetworking 多次上传减慢主线程

转载 作者:行者123 更新时间:2023-11-29 13:08:08 27 4
gpt4 key购买 nike

我有一个 UITabBarController,其中 UITableViewControllerA 列出文件,UITableViewContollerB 显示正在上传的文件的进度。

我有一个带有上传方法的单例类,该方法调用我的子类 AFHTTPClient 并使用 NSNotificationCenter 通知我的 UITableViewControllerB 上传进度。但目前的这种方式正在将 UI 减慢到几乎无法使用的程度,我不确定如何改进流程。我读到 AFNetworking 回调函数是在主线程上调用的。缓慢的 UI 响应是否来 self 的 NSNotificationCenter?

我还想提一下我是在模拟器上运行它的。

我的单例类中的方法。

 NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:uniqueName forKey:@"unique"];
[dict setObject:[NSNumber numberWithFloat:0] forKey:@"progress"];

[self.active addObject:dict];

[[CustomHTTP client] uploadFileName:@"filename" withBytes:data toPath:serverPath progress:^(float progress) {
[dict setObject:progress forKey:@"progress"];

NSMutableDictionary *info = [[NSMutableDictionary alloc] init];
[info setObject:[NSNumber numberWithInt:[self getIndexByUniquename:uniqueName]] forKey:@"row"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"ProgressNotification" object:self userInfo:info];

} success:^(AFHTTPRequestOperation *operation, id responseObject) {

} andFailure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];

UITableViewControllerB.m

- (void) receiveTestNotification:(NSNotification *) notification    {

if ([[notification name] isEqualToString:@"ProgressNotification"]) {
NSDictionary *dict = notification.userInfo;

int row = [[dict objectForKey:@"row"] intValue];

self.inProgress = [Transfer defaultTransfer].active;

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationNone];

}
}

最佳答案

您正在发送许多通知。重新加载 tableview 单元格是一个有点昂贵的操作。我会将通知的发布限制为仅在一个完整的百分点发生变化时或每秒仅发布一个。您可以尝试最适合您的方法,但 8300 条通知对于 tableview 来说已经足够了。

关于iphone - AFNetworking 多次上传减慢主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18095845/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com