ios - block 内的强弱。我该如何处理这个问题?

标签 ios objective-c objective-c-blocks weak-references

我有一个表格 View ,与 stackoverflow 非常相似,用户可以选择最佳答案。

我有一个 *answerContainers 的 NSMutableArray,其中包含一个 Answer 对象。

假设这个问题有 10 个答案。提出问题的用户选择第三个答案作为最佳答案。

我发起调用以将答案标记为服务器上的最佳答案,结果是更新后的 Answer 对象,我想在我的完成 block 中操作它。

所以它看起来像这样......

- (void)selectBestAnswer {
    for (AnswerContainer *answerContainer in self.answerContainers) {
        if (answerContainer.selected) { //can only be 1 selected
            Answer *answer = answerContainer.answer;
            QuestionDetailTableViewController * __weak weakSelf = self;
            [answer markAsBestAnswer:^(BOOL success, id responseObject, NSInteger statusCode, NSArray *messages, NSArray *errors) {
                if (success) {
                    QuestionDetailTableViewController *strongSelf = weakSelf;
                    Answer *answer = [Answer instanceFromDictionary:responseObject];

                    [strongSelf replaceAnswerWithAnswer:answer];

                    [strongSelf reloadTableView];
                }
            }];
        }
    }
}

这是我的问题

1) 我是否应该让我的弱者成为整个 Controller ,像这样。还是您通常只针对 answerContainer 执行此操作?

最佳答案

把所有“弱”的东西扔掉。只有在非常特殊的情况下才需要它,即 block 保留 self 并且 self 保留 block ,从而导致保留循环,从而导致 self 泄漏稍后的。您不属于那种情况,所以根本不要使用“弱-强舞蹈”。

关于ios - block 内的强弱。我该如何处理这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751724/

相关文章:

iphone - lowercaseStringWithLocale是做什么的?

iphone - MKReverseGeocoder 委托(delegate)方法是否在单独的线程上工作?

iphone - 带有 Objective-C block 的 UIView 动画

objective-c - Block 如何捕获其封闭范围之外的变量?

android - 如何在使用 Appium 进行测试自动化期间跟踪屏幕上的触摸操作

Android相当于文件和缓存目录

objective-c - 当前位置警报访问

ios - 如何在 'aspect fill' 模式下将 UIImageView 裁剪为新的 UIImage?

ios - 按下时键盘从不透明闪烁到透明

ios - 使用 Blocks 和 GCD 管理任务