gpt4 book ai didi

iOS 在 block 中使用 self.tableview 使保留循环因此泄漏

转载 作者:行者123 更新时间:2023-12-01 15:59:58 25 4
gpt4 key购买 nike

在我的UITableViewController的加载过程,我获取UITableView 's Data From ServerSingleton Class With Block,异步网络方法

我给 block ,进程UITableView数据提取完成时重新加载数据,到该方法

 __weak typeof(MyTableViewController) *weakSelf = self;
NSURLSessionTask *task = [[ServerSingleton getSharedServerModule] getPostsBestWithCategory:self.categoryNameString
numberOf:10
fromLastPostID:nil
andBlock:^(NSArray *posts_,
NSError *error) {
if (!error) {

weakSelf.posts=posts_;
[weakSelf.tableView reloadData]; /////////Only This row make LEAK!!!!
[weakSelf addFooterActivity];
[weakSelf checkAndPlayWithContentOffset];

weakSelf.isLoadingMoreData=false;
}];
[UIAlertView showAlertViewForTaskWithErrorOnCompletion:task delegate:nil];
[headRefreshControl setRefreshingWithStateOfTask:task];
}

下面是ServerSingleTon的方法,当网络请求完成时,它会处理我之前给它的 block
- (NSURLSessionDataTask *)getPostsBestWithCategory:(NSString *)categoryName                                
numberOf:(NSInteger)number
fromLastPostID:(NSString *)LastPostID
andBlock:( void (^)(NSArray *posts,
NSError *error))block{

AFHTTPSessionManager *client=[self getSessionManagerForInsecureDNS];

NSString *urlStr=@"urlString";


return [client GET:urlStr
parameters:nil
success:^(NSURLSessionTask *__unused task,id json){
NSArray *adaptedResult =[self PostArrayAdapterWithObject:json];
if (block) {
block([NSArray arrayWithArray:adaptedResult],nil);
}
}
failure:^(NSURLSessionTask *__unused task,NSError *error){
if (block) {
block([NSArray array],error);
}
}];

我的问题是我的自定义 UITableView Controller 进入保留周期,从而导致泄漏。

我发现我的问题是在 block 中使用 self,所以我将其更改为 weakSelf,但它也泄漏了,这是因为调用 [weakSelf.tableView reloadData];
当我删除它时,它不会泄漏,但是当该行存在时,它会保持循环并泄漏

什么使泄漏只能访问 UITableView ?但其他人没有???

我尝试过使用 UITableView 的弱类型本身,
UITableView从 Nib 开始,所以我连接到 __weak属性(property)

最佳答案

只是解决了同样的问题,您可能需要检查 tableView:cellForRowAtIndexPath: 中的代码, self可能保留在 UITableViewCell 中的某处代码,因为唯一的区别是 [tableView reloadData] .

关于iOS 在 block 中使用 self.tableview 使保留循环因此泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037412/

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