强大的一个街区内的弱势。我该如何处理这个问题?

时间:2015-07-31 17:17:39

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

我有一个tableview,就像stackoverflow一样,用户可以选择一个最好的答案。

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

让我们说这个问题有10个答案。提出问题的用户选择第3个答案为最佳答案。

我启动了一个调用,将答案标记为服务器上的最佳答案,结果是更新的Answer对象,我想在完成块中操作。

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

- (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)我应该像整个控制器那样做自己的弱点,就像这样。或者你通常只对answerContainer说这个吗?

2 个答案:

答案 0 :(得分:2)

把所有“弱”的东西扔掉。只有在块保留self并且self保留块的非常特殊的情况下才需要它,从而导致保留周期使self稍后泄漏。你不是那种情况所以不要使用“弱强舞”。

答案 1 :(得分:0)

如果您只有一个选定的答案,为什么不- (void)bestAnswerSelected:(Answer *)answer

- (void)sendAndUpdateBestAnswer:(Answer *)answer {
        [answer markAsBestAnswer:^(BOOL success, id responseObject, NSInteger statusCode, NSArray *messages, NSArray *errors) {
            if (success) {

                Answer *answer = [Answer instanceFromDictionary:responseObject];

                [self replaceAnswerWithAnswer:answer];

                [self reloadTableView];
            }
        }];
}

我认为selectBestAnswer是ins