title: How should SKNode subclasses communicate with parent Scenes and sibling nodes?
body: <p>How should a SKNode subclasses notify parent Scenes when events have taken place?</p>
  
  <p>I have a SKNode subclass that handles touch events by redrawing or removing the Node as appropriate, based on the game logic. What are the iOS best practices for notifying parent scenes, (or other sibling SKNode instances) that the event has taken place? Should I be using NSNotification center? Some form of delegation? I want to avoid tight coupling. I can think of a couple ways to get it done but wondering if there are standard practices, as there seem to be for non-game MCV iOS designs (e.g. NSNotification for communication between models, or model -> controller, and delegation or target-action for view -> controller, etc.)</p>
  
  <p>Conceptually, I like the idea of the SKNode subclass essentially serving the role of a 'View', and interpreting the touch event, then communicating 'semantic' game information to the containing scene or other nodes.</p>
  
  <pre><code>// SampleScene.m
  
  #include "SampleScene.h"
  #include "SampleBallNode.h"
  
  @implementation SampleScene
  - (void)didMoveToView:(SKView *)view {
    if (!self.contentCreated) {
      [self createSceneContents];
      self.contentCreated = YES;
    }
  }
  
  - (void)createSceneContents {
    self.backgroundColor = [SKColor whiteColor];
    self.scaleMode = SKSceneScaleModeAspectFit;
    [self addBall];
  }
  
  - (void)addBall {
    SampleBallNode *ball = [[SampleBallNode alloc] init];
    ball.position = CGPointMake(100, 100);
    [self addChild:ball];
  }
  
  @end
  
  // SampleBallNode.m
  
  #include "SampleBallNode.h"
  
  - (id)init {
    if ([super init]) {
      self.name = @"ball";
      self.userInteractionEnabled = YES;
      [self drawSelf];
    }
    return self;
  }
  
  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self removeFromParent];
  
    // TELL SCENE THAT I'VE DIED HERE... TO UPDATE SCORE OR SOMETHING...
  }
  
  - (void)drawSelf {
    UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect ...
  
    SKShapeNode *tokenBall = [[SKShapeNode alloc] init];
    tokenBall.path = ovalPath.CGPath;
    [self addChild:tokenBall];
  }
  
  @end
  </code></pre>