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