我正在使用以下实现来检查是否有可用的互联网连接,并且它工作正常,但因为我要检查互联网连接很多我认为最好(BOOL)可达到的方法是可用的到处都没有重写它。因为我是iOS开发的新手,所以我不知道该怎么做。最好的方法是什么?
//
// SigninViewController.m
//
#import "Reachability.h"
#import "SigninViewController.h"
@implementation SigninViewController
...
- (IBAction)SigninTouchUpInside:(id)sender
{
if ([self reachable])
{
NSLog(@"Reachable");
}
else
{
NSLog(@"Not Reachable");
}
}
- (BOOL)reachable {
Reachability *reachability = [Reachability reachabilityWithHostName:@"enbr.co.cc"];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
if(internetStatus == NotReachable) {
return NO;
}
return YES;
}
@end
答案 0 :(得分:3)
使其成为普通的C函数:
BOOL reachable()
{
// implementation here
}
在单独的头文件中声明它并独立于任何其他类实现它,因此可以在任何地方使用它。
答案 1 :(得分:2)
您可以将其设为app委托类的方法。由于该方法不需要访问任何类属性,因此它可以是类方法(使用“+”声明)而不是实例方法(使用“ - ”声明)。
在yourAppDelegate.h中:
+ (BOOL)reachable;
在yourAppDelegate.m中:
+ (BOOL)reachable {
Reachability *reachability = [Reachability reachabilityWithHostName:@"enbr.co.cc"];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
return (internetStatus == NotReachable);
}
调用方法:
#import "yourAppDelegate.h"
...
BOOL reachable = [YourAppDelegate reachable];
答案 2 :(得分:2)
Singleton Design Pattern完全符合这种用法
实现单例的最佳方法是创建一个继承NSObject的类,并声明一个sharedInstance
类方法,该方法将返回此类的唯一实例,这要归功于GCD dispatch_once
函数 (这样调用sharedInstance
将仅在第一次分配对象时,在进一步调用时始终返回相同的对象/实例)
@interface ReachabilityService : NSObject
+ (id)sharedInstance;
@property(nonatomic, readonly) BOOL networkIsReachable;
@end
@implementation ReachabilityService
+ (id)sharedInstance
{
static dispatch_once_t pred;
static ReachabilityService *sharedInstance = nil;
dispatch_once(&pred, ^{ sharedInstance = [[self alloc] init]; });
return sharedInstance;
}
- (BOOL)networkIsReachable
{
Reachability *reachability = [Reachability reachabilityWithHostName:@"enbr.co.cc"];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
return (internetStatus != NotReachable);
}
@end
另一种方法是直接将方法声明为类方法,因为它不会使用任何实例变量或属性。这是直接声明+ (BOOL)networkIsReachable
而不是- (BOOL)networkIsReachable
,并避免使用单例模式和sharedInstance
方法本身。
@interface ReachabilityService : NSObject
+ (BOOL)networkIsReachable;
@end
@implementation ReachabilityService
+ (BOOL)networkIsReachable
{
Reachability *reachability = [Reachability reachabilityWithHostName:@"enbr.co.cc"];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
return (internetStatus != NotReachable);
}
@end