UIApplication -scheduleLocalNotification:UIApplication -appWillTerminate调用时非常慢:

时间:2013-01-10 02:41:49

标签: iphone ios performance cocoa-touch uilocalnotification

time profiler of my app when i press home button

我在info.plist中设置了“应用程序无法在后台运行”,因此当用户点击主页按钮时,应用程序退出。

当我的[UIApplication -appWillTerminate:]被呼叫时,我会向系统安排64个本地通知,所有这些通知都是不重复的。

但在带有iOS6.0.1的iPhone4上花费了相当长的时间(6.17秒)。 当我查看时间分析器时,我发现曲线非常奇怪,它不占用太多CPU时间,但确实需要花费很多时间。

此外,当我查看调用树时,93%的时间花费在图像中显示的时间范围内的[UIApplication -scheduleLocalNotification:]上。 为什么呢?

这是我生成通知的方式:

UILocalNotification *n = [[[UILocalNotification] alloc] init] autorelease];
n.alertBody = @"some body";
n.hasAction = YES;
n.alertAction = @"some action";
n.fireDate = @"some date";
n.repeatInterval = 0;
n.soundName = @"my sound"
n.userInfo = aDictionaryWithAStringAbount10CharacterLongAnd2NSNumber.
[self.notifications addObject:n];

这是我安排通知的方式:

-(void)endProxyAndWriteToSystemLocalNotification
{
        _proxying = NO;
        NSDate *dateAnchor = [NSDate date];

        NSEnumerator *enumerator = [self.notifications objectEnumerator];
        NSInteger i = 0;
        while (i < maxLocalNotifCount) {
            UILocalNotification *n = [enumerator nextObject];
            if (!d) {
                break;
            }

            if ([n.fireDate timeIntervalSinceDate:dateAnchor] >= 0) {
                [[UIApplication sharedApplication] scheduleLocalNotification:n];
                i++;
            }
        }

        [self.notificationDatas removeAllObjects];

}

2 个答案:

答案 0 :(得分:5)

这会有所帮助:

-(void)endProxyAndWriteToSystemLocalNotification {

    [[UIApplication sharedApplication] setScheduledLocalNotifications:self.notifications];
}

iOS 4.2及更高版本

阅读UIApplication Class Reference以获取详细说明

答案 1 :(得分:0)

我认为问题在于您正在尝试安排64个本地通知。是否有理由在应用程序终止时执行所有这些操作?苹果scheduleLocalNotification的设计不是在终止时多次调用