ios - 在 iOS 中,头文件的 @interface 大括号内的 iVar 声明是强还是弱?
<p><p>下面的声明和调用是强引用还是弱引用?我知道 NSNotificationCenterblock 内的强引用会导致保留周期,所以我试图避免这种情况。</p>
<p>声明:</p>
<pre><code>@interface MPOCertifiedAccountsViewController : MPORootViewController <UITableViewDataSource, UITableViewDelegate> {
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]