2
我有一項服務,目前正在爲其編寫單元測試。代碼正常工作,但我收到了一個奇怪的保留週期警告。在Xcode的單元測試中出現奇怪的保留週期警告
[self.myService doSomethingCoolWithCompletionBlock:^(MyResponseObject *obj) {
XCTAssertNil(obj, @"obj should be nil");
}];
的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");
}];
我在其他單元測試使用self.someService
,和從未有過這個問題。任何人都經歷過這個?
編輯
我有了以下的另一項測試:
[self.myService doSomethingElseCoolWithCompletionBlock:(NSArray *results) {
XCTestAssertNotNil(results, @"results should not be nil");
}];
這不會給我一個警告。我看到的唯一區別是這是檢查數組,而另一個是檢查特定類型的對象。
謝謝,這似乎已經解決了警告。仍然沒有解釋爲什麼在其他測試中沒有顯示其他NSAssert的警告。你能進一步闡述一下嗎? – Taz
我嘗試了,但是在這個時候我的英語不允許我說出我的全部想法(對不起)。在這種情況下,您可以使用塊(myService retain block,self retain myService)並在內部使用assert。斷言它是一個宏(#define),這個宏將在編譯時粘貼到代碼中。所以你的街區裏面有自我。並將關係= self - > myService - > block - > self。可能是其他測試有沒有這種關係? – ajjnix
謝謝。這就說得通了。我已經添加了另一個我沒有發出警告的測試的例子。有任何想法嗎? – Taz