菜鸟教程小白 发表于 2022-12-13 07:50:24

ios - 在 iOS 中,头文件的 @interface 大括号内的 iVar 声明是强还是弱?


                                            <p><p>下面的声明和调用是强引用还是弱引用?我知道 NSNotificationCenterblock 内的强引用会导致保留周期,所以我试图避免这种情况。</p>

<p>声明:</p>

<pre><code>@interface MPOCertifiedAccountsViewController : MPORootViewController &lt;UITableViewDataSource, UITableViewDelegate&gt; {

    UITableView *certifiedTableView;
}
</code></pre>

<p>调用:</p>

<pre><code>- (id)init
{
    self = ;

    if (self) {

      [ addObserverForName:MPOFriendManagerManagerDidFinishRefreshingLocal
                                                          object:nil
                                                         queue:
                                                      usingBlock:^(NSNotification *note) {

                                                          ;

                                                      }];
    }

    return self;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>默认情况下所有实例变量都是<em>strong</em>。但是,这与此处无关,因为</p>

<pre><code>;
</code></pre>

<p>事实上</p>

<pre><code>;
</code></pre>

<p>并且保留<code>self</code>,而不是实例变量。所以你在这里有一个保留周期,
与 <code>certifiedTableView</code> 是强实例变量还是弱实例变量无关。</p>

<p>您可以使用众所周知的创建对 <code>self</code> 的弱引用的技术来解决这个问题:</p>

<pre><code>__weak typeof(self) weakSelf = self;
</code></pre>

<p> block 中使用的:</p>

<pre><code>typeof(self) strongSelf = weakSelf;
if (strongSelf != nil) {
    ;
}
</code></pre>

<p>您还应该考虑使用 <em>属性</em> 而不是实例变量。
使用 <code>self.certifiedTableView</code> 您会立即看到 <code>self</code> 被保留。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 iOS 中,头文件的 @interface 大括号内的 iVar 声明是强还是弱?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23686534/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23686534/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 iOS 中,头文件的 @interface 大括号内的 iVar 声明是强还是弱?