【发布时间】:2021-06-24 21:37:24
【问题描述】:
情况如下:
在异步函数中,我捕获了一个weakSelf。
__block auto weakSelf = self;
然后,在块内,我捕获了那个 weakSelf 的一个 strongSelf。
[_someIvar someAsyncMethod:^{
__strong auto strongSelf = weakSelf;
}];
但是,如果 strongSelf 为 nil,我会进行一些错误处理和报告。
if (!strongSelf) {
_NotifyDelegate(someDeallocationError); // C
}
整件事:
__block auto weakSelf = self;
[_someIvar someAsyncMethod:^{
__strong auto strongSelf = weakSelf;
if (!strongSelf) {
// How can I trigger this line?
_NotifyDelegate(someDeallocationError); // C
}
}
}];
这是所有遗留代码,我正在使用 OCMock 添加单元测试。如何在运行时将 strongSelf 设为 nil 并触发该委托通知?
【问题讨论】:
-
如果你删除了对该对象的所有引用,那么该对象应该被释放,弱引用应该变为 nil。
-
使用dispatch来延迟asyncMethod还是使用runtime来交换实现插入代码设置self为nil?
-
@childrenOurFuture 如果您发布了一个示例,我很乐意支持并接受 :)
-
除了
auto类型推断之外,这里还有其他 C++ 吗?在我看来不像。在这种情况下,将标题从“Objective-C++”改为“Objective-C”可能会吸引更多眼球,因为 Objective-C++ 是一个非常小众的东西,回答问题的专家(嗨!)相对较少。 -
我很困惑你为什么要这么做。如果弱自我在分配时不为零,则强自我不能为零。如果您想测试 nil 弱自我,只需测试 nil ...
标签: objective-c unit-testing objective-c-blocks objective-c++