我应该在哪里进行可达性检查?

时间:2010-10-17 14:54:07

标签: iphone objective-c cocoa-touch ios reachability

我想检查有效的网络连接。我按照Apple的Reachability示例,将我的支票放入applicationDidFinishLaunching

#pragma mark -
#pragma mark Application lifecycle

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

        if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) 
        {
            NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");
        }

        // Override point for customization after application launch.
        [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];

        //Check for connectivity
        internetReach = [[Reachability reachabilityForInternetConnection] retain];
        [internetReach startNotifer];
        [self updateInterfaceWithReachability: internetReach];

        [window addSubview:navigationController.view];
        [window makeKeyAndVisible];

        return YES;
    }

但是,我的应用有时会因错误Application Failed to Launch in Time

而崩溃

我在这里发布了我的崩溃问题:Application Failed to Launch in Time

我不确定应该在哪里执行可达性检查?

2 个答案:

答案 0 :(得分:3)

可达性检查可能需要很长时间(30秒或更长时间),具体取决于网络状况。但是如果你的应用程序的用户界面没有响应几秒钟(远小于30秒),操作系统会认为它已经死了并将其杀死。

如果您在后台线程中进行可访问性检查,而不是UI线程,那么您的UI将保持响应,操作系统和用户都不会认为您的应用已被锁定或崩溃。

答案 1 :(得分:0)

-applicationDidBecomeActive中,您可以在后台调用方法 ,该方法将可访问性代码与-performSelectorInBackground:withObject:一起使用。