title: willRemoveSubview does not remove subview when called from a class outside the superView's ViewController?
body: <p>I don't understand the different behavior I am observing with my iOS application when I am programmatically removing subviews using Objective-C and the UIView willRemoveSubview method.  </p>
  
  <p><strong>Method 1</strong><br>
  In my ViewController class I add a UIVisualEffectView as a subview for the ViewController's view:  </p>
  
  <pre><code>- (void)blurView {
      UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
      blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
      blurEffectView.frame = self.view.bounds;
      blurEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
  
      [self.view insertSubview:blurEffectView atIndex:5];
  }
  </code></pre>
  
  <p>This method is called in response to some action by the user.</p>
  
  <p>The blurEffectView itself is a private variable of my ViewController class defined in the implementation, which will point to the new subview  </p>
  
  <pre><code>@interface MyViewController ()
  
  @end
  @implementation
  UIVisualEffectView *blurEffectView;  
  ...
  </code></pre>
  
  <p>I have a Tap Gesture recognizer which calls another method to "unblur" by removing the subview that was added  </p>
  
  <pre><code>- (void) tapped {
      blurEffectView.hidden = true;
      [self.view willRemoveSubview:blurEffectView];
  }
  </code></pre>
  
  <p>This method works fine, the blur shows up and covers the view. When the tap happens the blur disappears, and everything looks ok.</p>
  
  <p><strong>Method 2</strong><br>
  Next I tried something a little more complex, and it now behaves differently. I created a small Objective-C class to wrap the blur/unblur functions in a separate utility object that I can reuse more easily.  </p>
  
  <p>Basically the MyViewController now has a new private variable to reference my new class ViewBlurrer which just extends NSObject. ViewBlurrer now encapsulates the reference to the UIVisualEffectView *blurEffectView, and it's interface has public methods for blur and unblur.<br>
  So the hierarchy is something like
  MyViewController -> ViewBlurrer -> UIVisualEffectView</p>
  
  <p>ViewBlurrer also maintains a reference to the MyViewController.view, which it uses in the blur and unblur methods. Call this pointer parentView.</p>
  
  <p>This behaves exactly the same for blur, it correctly adds the blur effect that covers up the ViewController's view.  </p>
  
  <p>What I observed differently, is that I could not hide and remove the blurEffectView now that it was in this utility class ViewBlurrer. The only way I could make it get removed was to lookup the UIVisualEffectView with arbitrary tag number such as this in the ViewBlurrer.unblur method:  </p>
  
  <pre><code>-(void)unblurView {
      UIView *theSubView = [self.parentView viewWithTag:66];
      theSubView.hidden = YES;
      [self.parentView willRemoveSubview:theSubView];
  }
  </code></pre>
  
  <p>My question is why I can't just call
  [self.parentView willRemoveSubview:blurEffectView], but I have to look up by tag isn't the pointer to blurEffectView that I inserted to the parentView still equivalent as it was in the original approach in Method 1?</p>