永无止境的CTCall实例

时间:2015-10-16 19:09:15

标签: ios

所以我发现这个代码片段在线检测进来的电话。工作得很好,除了它不断创建从未发布过的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();

对此的任何帮助将不胜感激。我最后也收到警告。 “在这个区块中强烈捕获'阻止'可能会导致保留周期”

这可能是问题的一部分,但就像我上面提到的那样。我对块语句不太满意。所以我不确定如何解决这个问题。

0 个答案:

没有答案