title: Dead lock on Singleton call
body: <p>When I initialize a singleton like this, I found it will lead to dead lock.</p>
  
  <pre><code>@interface A : NSObject
  @property (readwrite, nonatomic, assign) BOOL flag;
  @end
  
  @implementation A
  
  +(instancetype)sharedInstance
  {
      static id instance = nil;
      static dispatch_once_t once;
      dispatch_once(&amp;once, ^{
          instance = self.new;
      });
      return instance;
  }
  
  -(instancetype)init
  {
      self = [super init];
      if(self != nil)
      {
          [A sharedInstance].flag = YES;
      }
      return self;
  }
  @end
  </code></pre>
  
  <p>Is there any way to break it?</p>