案发现场:
用下面的网络监听失败了: status老是0。郁闷了。
//处理连接改变后的情况
- (void) updateInterfaceWithReachability: (Reachability*) curReach
{
//对连接改变做出响应的处理动作。
printf("ddddd %d\n", status);
self.status = [curReach currentReachabilityStatus];
printf("ddddd %d\n", status);
}
// 连接改变
- (void) reachabilityChanged: (NSNotification* )note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[self updateInterfaceWithReachability: curReach];
}
- (void) startNotificationCenter {
//开启网络状况的监听
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name: kReachabilityChangedNotification
object: nil];
Reachability *hostReach = [Reachability reachabilityWithHostName:@"http://www.manmanzou.com/m"];//可以以多种形式初始化
[hostReach startNotifier]; //开始监听,会启动一个run loop
[self updateInterfaceWithReachability: hostReach];
}
原因已经找到:
Reachability *hostReach = [Reachability reachabilityWithHostName:@"http://www.manmanzou.com/m"];//可以以多种形式初始化
由于iSO5引进新特新:
Automatic Reference Counting
内存的自动管理。这里的局部变量,在该最用范围内被自动释放。判断网络的核心方法是:
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
hostReach = [Reachability reachabilityWithHostName: MANMANZOU_SITE];
[hostReach startNotifier];
其中hostReach必须能hold住。