title: why this RACObserve block caused retain cycle?
body: <p>Consider I in my view controller, I added RACObserve of property of Singleton, and inside subscribNext I have a self reference in it.
  The code is as below:</p>
  
  <pre><code>[RACObserve([Singleton shared], singletonFlag) subscribeNext:^(NSNumber *singletonFlag) {
          self.flag = [singletonFlag boolValue];
      }];
  </code></pre>
  
  <p>Based on my understanding, self don't hold a strong reference of the block(while block hold a strong reference of self), this shouldn't cause retain cycle.
  I have read memory management of reactive cocoa as well <a href="https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/Documentation/Legacy/MemoryManagement.md" rel="nofollow">https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/Documentation/Legacy/MemoryManagement.md</a>
  In which they provide an example as </p>
  
  <pre><code>[RACObserve(self, username) subscribeNext:^(NSString *username) {
      [self validateUsername];
  }];
  </code></pre>
  
  <p>I totally understand why it caused the retain cycle in above case and we need a weak self inside the block.
  I am confused why in the first case, it will cause a retain cycle. To confirm this, just paste that code snippet after viewDidLoad and see whether the view controller was dealloc-ed when it should be.
  If you need see more implementations of the singleton, this is the code,</p>
  
  <pre><code>@interface Singleton : NSObject
  @property (readwrite,nonatomic) BOOL singletonFlag;
  @end
  
  @implementation Singleton
  + (Singleton *)shared {
      static dispatch_once_t pred = 0;
      __strong static id _sharedObject = nil;
      dispatch_once(&amp;pred, ^{
          _sharedObject = [[self alloc] init];
      });
      return _sharedObject;
  }
  
  - (id)init {
      if (self = [super init]) {
          NSLog(@"init of %@",NSStringFromClass(self.class));
      }
      return self;
  }
  @end
  </code></pre>
  
  <p>Anyone enlighten me about this?</p>