OGeek|极客世界-中国程序员成长平台

标题: ios - Xcode 单元测试中出现奇怪的保留周期警告 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 12:51
标题: ios - Xcode 单元测试中出现奇怪的保留周期警告

我有一项服务,目前正在为其编写单元测试。代码按预期工作,但我收到一个奇怪的保留周期警告。

[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-推荐答案


断言它是宏,并在内部使用了 self。 所以你需要创建名称为 self 的局部变量。

__weak id weakSelf = self;
self.fooBlock = ^{
    id self = weakSelf;
    XCTAssert(YES);
};

关于ios - Xcode 单元测试中出现奇怪的保留周期警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019301/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4