title: Caputure property value lead to retain cycle through _property style
body: <p>I have a class, there's a block proper:</p>
  
  <pre><code>@property(nonatomic, strong) void (^hehe)();
  </code></pre>
  
  <p>In the init method, I do the following work:</p>
  
  <pre><code>__weak test *weakSelf = self;
  self.hehe = ^{
      test *self = weakSelf;
      NSLog(@"%zd", self.a);
      NSLog(@"%zd", self-&gt;_a);
      NSLog(@"%zd", _a);
  };
  </code></pre>
  
  <p>What is the difference between the last two line in the block.</p>
  
  <p>I thought <code>self-&gt;_a</code> is equals to <code>_a</code>.</p>
  
  <p>But the Xcode shows warning on the last line:</p>
  
  <p><code>Caputuring self strongly in this block is likely to lead a retain cycle</code></p>
  
  <hr>
  
  <p>Edit:</p>
  
  <p>I know the local self and the global self is not the same. How the os distinguish the difference. I used clang to rewrite the code, and get the following:</p>
  
  <pre><code>static void __ViewController__init_block_func_0(struct __ViewController__init_block_impl_0 *__cself) {
    __Block_byref_weakSelf_0 *weakSelf = __cself-&gt;weakSelf; // bound by ref
  
      ViewController *self = (weakSelf-&gt;__forwarding-&gt;weakSelf);
      NSLog((NSString *)&amp;__NSConstantStringImpl__var_folders_gp_6ztdfl3n5919c3y4pb03gd340000gn_T_ViewController_ad5b98_mi_0, ((NSInteger (*)(id, SEL))(void *)objc_msgSend)((id)self, sel_registerName("a")));
      NSLog((NSString *)&amp;__NSConstantStringImpl__var_folders_gp_6ztdfl3n5919c3y4pb03gd340000gn_T_ViewController_ad5b98_mi_1, (*(NSInteger *)((char *)self + OBJC_IVAR_$_ViewController$_a)));
      NSLog((NSString *)&amp;__NSConstantStringImpl__var_folders_gp_6ztdfl3n5919c3y4pb03gd340000gn_T_ViewController_ad5b98_mi_2, (*(NSInteger *)((char *)self + OBJC_IVAR_$_ViewController$_a)));
  }
  </code></pre>
  
  <p>The last two line is used the same self...</p>