【问题标题】:Repetedly call a function重复调用一个函数
【发布时间】:2011-09-15 10:22:38
【问题描述】:

我正在创建一个函数,该函数将在每 5 分钟后调用一次,直到项目从后台删除。

我已经实现了 NSTimer ,但它会产生一些问题,比如崩溃和一些难以管理的问题,

有没有办法在每 5 分钟后重复调用一个函数而不使用计时器?

我发现的一种方法是使用警报服务,但我不知道如何实现。

编辑:示例一

if([[NSUserDefaults standardUserDefaults] boolForKey:@"IsUpdateConfigON"] == TRUE){

        //NSLog(@"*****************   One Timer to call UpdateConfig");

    NSString *updatedDate = [[NSUserDefaults standardUserDefaults] valueForKey:@"IsUpdateConfigLastUpdateTime"];    
    int time = [Global getTimeDiff:updatedDate];

        //NSLog(@"********************************** Timer value UPDATE CONGIF  %d",time);


    if(time >= 10){     

            //NSLog(@"****************** When time : %d >=  %d  :Config_Interval seconds ",time,Config_Interval);
        cls_ConfigurationJSON *objConfig = [[cls_ConfigurationJSON alloc]init];
        [objConfig loadView];
        [objConfig release];
    }
}

其中 time 是 time 的倒计时,1 , 2, 3 等。此函数在每 5 分钟后调用一次。

所以如果有人有任何建议或代码,请帮助我。

【问题讨论】:

  • NSTimer 怎么难管理?发布一些崩溃代码。

标签: iphone ios4 iphone-sdk-3.0 nstimer


【解决方案1】:

NSTimer 是频繁调用方法的首选方式。发生的崩溃可能是由于对象释放或定时器失效等相关问题。

【讨论】:

  • 嘿 7KV7 感谢您的回答,所以除了 NSTimer 之外,目前没有任何更好的选择,我正确吗?
  • 是的,它可能是最理想的。
【解决方案2】:

当您想在一定时间后调用某个函数时,NSTimer 确实是一个不错的选择。如果您可以发布代码,我们将尝试解决您的崩溃问题。

线程中的其他可能选项是进行无限循环并放置等待语句。

你可以从这里调用无限循环的函数。

[NSThread detachNewThreadSelector:<#(SEL)selector#> toTarget:<#(id)target#> withObject:<#(id)argument#>]

执行操作后,您可以使用它使其休眠5分钟。

[NSThread sleepForTimeInterval:<#(NSTimeInterval)ti#>]

最后确保一旦您的应用程序进入后台,任何进程的运行时间都不能超过 10 分钟。因此,在从后台删除之前,我将无法运行某些进程。

【讨论】:

    【解决方案3】:

    nstimer 是最好的选择,因为它在单独的线程中运行...这是我在代码中使用的,不会导致任何问题。

    {
    [NSTimer scheduledTimerWithTimeInterval:5.0
                                     target:self
                                   selector:@selector(checkNetworkStatus:)
                                   userInfo:nil
                                    repeats:YES];
    
    return YES;
    }
    
    
    - (void) checkNetworkStatus:(NSNotification *)notice
    {
    // called after network status changes
    
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)
    
    {
        case NotReachable:
        {
            NSLog(@"The internet is down.");
            internetConnectivity=@"NO";
            break;
    
        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI.");
            internetConnectivity=@"YES";
            SyncRecords *obj=[[SyncRecords alloc]init];
            [obj syncData];
            break;
    
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN.");
            internetConnectivity=@"YES";
            SyncRecords *obj=[[SyncRecords alloc]init];
            [obj syncData];
            break;
    
        }
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 2016-04-22
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多