0

私が実際にインターネットに接続していると仮定すると、このコードを使用して、デバイスがWiFi経由で接続されているかどうかを確認します。

+ (BOOL)hasWiFiConnection {

    Reachability *reachability = [Reachability reachabilityForInternetConnection];
    [reachability startNotifier];

    NetworkStatus status = [reachability currentReachabilityStatus];

    if (status == ReachableViaWiFi) {

        return YES;

    } else {

        return NO;
    }
}

そのコードは実行が速いですか?

写真のURLを生成するときに使用しています(高解像度の写真をロードするか低解像度の写真をロードするかを知るため)。これらの画像はリストビューに表示されます(1行に3枚)。リストをスクロールすると、関数が1秒間に数回呼び出されます。それは効率的ですか?

4

1 に答える 1

2

到達可能性クラスを使用したくない場合は、次のコードを使用してください。

        @interface CMLNetworkManager : NSObject
        +(CMLNetworkManager *) sharedInstance;

       -(BOOL) hasConnectivity;
          @end

実装

         @implementation CMLNetworkManager

         +(CMLNetworkManager *) sharedInstance {
     static CMLNetworkManager *_instance = nil;
@synchronized(self) {
    if(_instance == nil) {
        _instance = [[super alloc] init];
    }
}
return _instance;
 }

   -(BOOL) hasConnectivity {
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress);
if(reachability != NULL) {
    //NetworkStatus retVal = NotReachable;
    SCNetworkReachabilityFlags flags;
    if (SCNetworkReachabilityGetFlags(reachability, &flags)) {
        if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
        {
            // if target host is not reachable
            return NO;
        }

        if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
        {
            // if target host is reachable and no connection is required
            //  then we'll assume (for now) that your on Wi-Fi
            return YES;
        }


        if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
             (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
        {
            // ... and the connection is on-demand (or on-traffic) if the
            //     calling application is using the CFSocketStream or higher APIs

            if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
            {
                // ... and no [user] intervention is needed
                return YES;
            }
        }

        if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
        {
            // ... but WWAN connections are OK if the calling application
            //     is using the CFNetwork (CFSocketStream?) APIs.
            return YES;
        }
    }
}

return NO;
  }
  @end

クラス共有インスタンスでboolメソッドを使用します

于 2013-02-19T14:19:12.103 に答える