title: Reachability crashes app
body: <p>I just implemented Apple's Reachability code and my App is now crashing in a completely inconsistent and random fashion: it could successfully load 20 web-pages in a row - but then crash on the 21st. attempt, or it could crash after just the 2nd. web-page load attempt</p>
  
  <p>Instruments/NSZombies shows something strange: the RefCt gets to be as high as 20 (!), with the "Responsible Callers" being several different ones: [UIRuntimeConnection initWithCoder], [UINib instantiateWithOwner: options], [NSKeyedUnarchiver _decodeArrayOfObjectsForKey:], etc. 
  Is that normal?</p>
  
  <p>Or should I just focus on the last Responsible Callers? 
  Those are [UIWindowController transitionViewDidComplete:fromView:toView:] (which brings the RefCt to 0), and
  [UIWebView webView:didFinishLoadForFrame:] (which takes the RefCt down to -1)?</p>
  
  <p>How do I go about debugging and solving this?</p>
  
  <p>Here is the Code:</p>
  
  <pre><code>#import "Reachability.h"
  
  
  -(void) viewWillAppear:(BOOL)animated
  {
     // check for internet connection
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
  
  internetReachable = [[Reachability reachabilityForInternetConnection] retain];
  [internetReachable startNotifier];
  
  // check if a pathway to a random host exists
  hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
  [hostReachable startNotifier];
  
  // now patiently wait for the notification
  }
  
  
  
  -(void) viewDidLoad {
  
      url = [NSURL URLWithString: @"http://www.google.com"];
      NSURLRequest *req = [NSURLRequest requestWithURL: url];
      [webPageView loadRequest:req];
      [super viewDidLoad];
  }
  
  
  
  -(void) checkNetworkStatus:(NSNotification *)notice
  {
          // called after network status changes
  
      NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
  
      switch (internetStatus) 
      {
          case NotReachable:
          {
              //NSLog(@"The internet is down.");
              //self.internetActive = NO;   // (That's a BOOL variable)
              [self displayMessageWithTitle:@"ERROR"
                                 andMessage:@"Unable To Connect to Internet"
                                andOKButton:@"OK"];
              [self dismissModalViewControllerAnimated:YES];
              break;
  
          }
          case ReachableViaWiFi:
          {
              //NSLog(@"The internet is working via WIFI.");
              //self.internetActive = YES;    //
  
              break;
  
          }
          case ReachableViaWWAN:
          {
              //NSLog(@"The internet is working via WWAN.");
              // self.internetActive = YES;   // (That's a BOOL variable)
  
              break;
  
          }
      }
  
      NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
      switch (hostStatus)
      {
          case NotReachable:
          {
              // NSLog(@"A gateway to the host server is down.");
              // self.hostActive = NO;    // (That's a BOOL variable)
  
              [self displayMessageWithTitle:@"ERROR"
                                 andMessage:@"Host Not Reachable"
                                andOKButton:@"OK"];
              [self dismissModalViewControllerAnimated:YES];
              break;
  
          }
  
          case ReachableViaWiFi:
          {
              //NSLog(@"A gateway to the host server is working via WIFI.");
              //self.hostActive = YES;    // (That's a BOOL variable)
  
              break;
  
          }
  
          case ReachableViaWWAN:
          {
              //NSLog(@"A gateway to the host server is working via WWAN.");
              // self.hostActive = YES;   // (That's a BOOL variable)
  
              break;
  
          }
      }
  }
  
  
  
  - (void)webViewDidStartLoad:(UIWebView *)webView {
      [activityIndicator startAnimating];
  }
  
  
  - (void)webViewDidFinishLoad:(UIWebView *)webView {
      [activityIndicator stopAnimating];
  }
  
  
  // Since this ViewController is presented Modally, this method removes it:
  -(IBAction) dismissWebTixView:(id)sender {
      [self dismissModalViewControllerAnimated:YES];
  }
  
  
  
  
  -(void) viewWillDisappear:(BOOL)animated {
      NSLog(@"In webForTix's 'viewWillDisappear' method....");
      [[NSNotificationCenter defaultCenter] removeObserver:self
  name:kReachabilityChangedNotification
                                                object:nil];
  }
  
  
  // Read somewhere that it might be better to put the removeObserver
  // call here rather than viewWillDisappear...tried both - still get crashes....
  - (void)dealloc
  {
      //NSLog(@"In webForTix's dealloc method....");
  //    [[NSNotificationCenter defaultCenter] removeObserver:self
  //                                                        name:kReachabilityChangedNotification
  //                                                  object:nil];
  NSLog(@"In webForTix's dealloc method - removedObserver...");
  [super dealloc];
  </code></pre>
  
  <p>}</p>