gpt4 book ai didi

ios - block 中嵌套 block 的弱引用和强引用

转载 作者:行者123 更新时间:2023-12-01 18:56:01 27 4
gpt4 key购买 nike

我正在我的代码块中寻找保留周期。我的 UITableViewController 中有以下代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//[...] Not important code.
__weak ELParkingLocationTVC *weakself = self; // Required? (1)
cell.completionBlock = ^ {
__strong ELParkingLocationTVC *strongSelf = weakself; // Required? (2)
__weak ELParkingLocationTVC *weak2self = weakself; // Required? (3)
[strongSelf dismissViewControllerAnimated:YES completion:^{
__strong ELParkingLocationTVC *strong2self = weak2self; //Required? (4)
ELMenuHistoryTVC *menuTVC = [strong2self.navigationController.viewControllers firstObject];
[menuTVC.parentTabBarController moveToTab:ELMapViewControllerIndex completion:^(BOOL finished) {
ElMainMapViewController *mainMapViewController = menuTVC.parentTabBarController.viewControllers[ELMapViewControllerIndex];
//ELCustomParkplace *customParkplace = [strong2self parkplaceAtIndex:indexPath.row]; //(5)
[mainMapViewController moveToCoordinate:customParkplace.coordinate];
}];
}];
};
}

并有以下问题:
  • 其中__weak其中__strong我需要引用吗?我确定我必须使用第 1 和第 2,但我真的不确定第 3 和第 4。
  • 我可以使用 @strongify@weakify这里?
  • 我想我不需要第 (5) 行,但我不确定。

  • 任何建议、链接或好的评论将不胜感激!

    最佳答案

    您确实需要单元格完成处理程序的弱引用,因为您有一个引用周期:self > UITableView > UITableViewCell > self .

    您不需要使用 __strong限定符。默认情况下,变量是强引用。

    您不需要动画和过渡完成处理程序的弱引用,因为这些 block 在过渡完成后立即释放,但在这种情况下它们不能使用 self因为它们嵌套在无法捕获 self 的 block 内.

    所以保留weakSelfstrongSelf , 并使用相同的 strongSelf所有嵌套 block 内的变量。

    关于ios - block 中嵌套 block 的弱引用和强引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27147842/

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