【问题标题】:Where should I perform a Reachability check?我应该在哪里执行可达性检查?
【发布时间】:2010-10-17 14:54:07
【问题描述】:

我想检查有效的网络连接。我遵循了 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

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

【问题讨论】:

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


    【解决方案1】:

    根据网络状况,可达性检查可能需要很长时间(30 秒或更长时间)。但是,如果您的应用程序的 UI 在几秒钟内(远少于 30 秒)没有响应,则操作系统会假定它已死并杀死它。

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

    【讨论】:

    【解决方案2】:

    -applicationDidBecomeActive 中,您可以在后台调用一个方法,该方法使用带有-performSelectorInBackground:withObject: 的可达性代码。

    【讨论】:

    • 为什么我不能把它放在ApplicationDidFinishLaunching中?
    • 您不想在每次应用程序激活时对其进行测试吗?在 iOS 4 多任务处理中,这种情况经常发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多