ios - Xcode 单元测试中出现奇怪的保留周期警告
<p><p>我有一项服务,目前正在为其编写单元测试。代码按预期工作,但我收到一个奇怪的保留周期警告。</p>
<pre><code>[self.myService doSomethingCoolWithCompletionBlock:^(MyResponseObject *obj) {
XCTAssertNil(obj, @"obj should be nil");
}];
</code></pre>
<p><code>XCTAssertNil(obj, @"obj should be nil");</code> 行在 Xcode 中显示警告 <code>在此 block 中强烈捕获 'self' 可能会导致保留周期</code>.</p>
<p>如果我将代码更改为以下内容,警告将被删除:</p>
<pre><code>__weak MyService *weakService = self.myService;
[weakService doSomethingCoolWithCompletionBlock:^(MyResponseObject *obj) {
XCTAssertNil(obj, @"obj should be nil");
}];
</code></pre>
<p>我在其他单元测试中使用了 <code>self.someService</code>,从来没有遇到过这个问题。以前有人遇到过这种情况吗?</p>
<p><strong>编辑</strong></p>
<p>我有另一个测试具有以下内容:</p>
<pre><code>[self.myService doSomethingElseCoolWithCompletionBlock:(NSArray *results) {
XCTestAssertNotNil(results, @"results should not be nil");
}];
</code></pre>
<p>这不会给我警告。我看到的唯一区别是,这是检查数组,而另一个检查特定类型的对象。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>断言它是宏,并在内部使用了 self。
所以你需要创建名称为 self 的局部变量。</p>
<pre><code>__weak id weakSelf = self;
self.fooBlock = ^{
id self = weakSelf;
XCTAssert(YES);
};
</code></pre></p>
<p style="font-size: 20px;">关于ios - Xcode 单元测试中出现奇怪的保留周期警告,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/35019301/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/35019301/
</a>
</p>
页:
[1]