Taz*_*Taz 3 xcode unit-testing objective-c ios
我有一项服务,我目前正在为其编写单元测试。代码按预期工作,但我收到一个奇怪的保留周期警告。
[self.myService doSomethingCoolWithCompletionBlock:^(MyResponseObject *obj) {
XCTAssertNil(obj, @"obj should be nil");
}];
Run Code Online (Sandbox Code Playgroud)
该XCTAssertNil(obj, @"obj should be nil");行在 Xcode 中显示警告Capturing 'self' strongly in this block is likely to lead to a retain cycle。
如果我将代码更改为以下内容,则会删除警告:
__weak MyService *weakService = self.myService;
[weakService doSomethingCoolWithCompletionBlock:^(MyResponseObject *obj) {
XCTAssertNil(obj, @"obj should be nil");
}];
Run Code Online (Sandbox Code Playgroud)
我正在self.someService其他单元测试中使用,从未遇到过这个问题。有没有人经历过这种情况?
编辑
我有另一个测试,其中包含以下内容:
[self.myService doSomethingElseCoolWithCompletionBlock:(NSArray *results) {
XCTestAssertNotNil(results, @"results should not be nil");
}];
Run Code Online (Sandbox Code Playgroud)
这不会给我警告。我看到的唯一区别是,这是检查数组,另一个是检查特定类型的对象。
断言它是宏并在内部使用 self 。所以你需要创建名为 self 的局部变量。
__weak id weakSelf = self;
self.fooBlock = ^{
id self = weakSelf;
XCTAssert(YES);
};
Run Code Online (Sandbox Code Playgroud)