我被要求修复这个不起作用的代码,这是一个常见的后台任务。
__weak NSManagedObjectContext *weakCtx=[CDC privateManagedObjectContext]; // convenient class+macro for obtaining a private context queue
__weak id weakSelf = self;
[weakCtx performBlock:^{
__strong id strongSelf = weakSelf;
__strong NSManagedObjectContext *ctx = weakCtx; // <-- nil
// more code following
];
该问题是在代码后面由ctx
nil 引起的。但是,如果我在块中放置一个断点,我可以看到虽然 weakCtx 仍然有效,但 ctx 得到一个 nil 值,这导致块失败。
相反,weakSelf 被正确分配,并在其余代码中工作。
我错过了什么?