所以我发现这个代码片段在线检测进来的电话。工作得很好,除了它不断创建从未发布过的CTCall对象。这反过来会消耗相当大的内存。
我对块语句不够熟悉,无法正确分析正在发生的事情,所以我希望得到一些帮助。我需要做什么来删除CTCall对象。
下面的代码在appDelegate的应用程序中:didFinishLaunchingWithOptions:method
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
CTCallCenter *callCenter = [[CTCallCenter alloc] init];
__block NSString *lastState = nil;
__block void (^block)(void) = ^(void) {
CTCall *call = [[callCenter currentCalls] anyObject];
if (call) {
if (![lastState isEqualToString:call.callState]) {
self.isInCall = YES;
lastState = call.callState;
[self postNotificationWithBody:call.callState];
}
} else {
if (lastState != nil) {
[self postNotificationWithBody:@"CTCallStateDisconnected"];
self.isInCall = NO;
} else {
if (self.isInCall) {
int64_t delayInSeconds = 3.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
[self postNotificationWithBody:@"Call Failed"];
});
self.isInCall = NO;
}
}
lastState = nil;
}
int64_t delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), block);
};
block();
对此的任何帮助将不胜感激。我最后也收到警告。 “在这个区块中强烈捕获'阻止'可能会导致保留周期”
这可能是问题的一部分,但就像我上面提到的那样。我对块语句不太满意。所以我不确定如何解决这个问题。