iphone - 对象 dealloc 仅在 iOS 4.3 中崩溃
<p><p>我试图弄清楚为什么使用 didSelectRowAtIndexPath 在我的 tableView 中推送 viewController 会导致 iOS 4.3 中的崩溃,但在 iOS 5.0+ 中,它可以正常工作。</p>
<p>当我打电话时它就崩溃了:</p>
<pre><code>self.customViewController = [[ initWithNibName:@"CustomViewController"bundle:nil] autorelease];
</code></pre>
<p>第一次推送 customViewController 之后的任何时间。</p>
<p>这是我的相关代码:</p>
<pre><code>@property (nonatomic, retain) CustomViewController *customViewController;
-(void) dealloc // Dealloc of tableView.
{
;
customViewController = nil;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.customViewController = [[ initWithNibName:@"CustomViewController"bundle:nil] autorelease]; // Release old, allocate new, set it.
[ pushViewController:customViewController animated:YES];
; // Balance out pushViewController's retain.
}
</code></pre>
<p>谢谢。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.customViewController = [[ initWithNibName:@"CustomViewController"bundle:nil] autorelease];
[ pushViewController:customViewController animated:YES];
; // Balance out pushViewController's retain. ---->NO
}
</code></pre>
<p>最后一个<code>release</code>是多余的,不需要。<br/>
您已经对其进行了 <code>autorelease</code> 以使其 <code>retain count</code> 减一。 </p>
<hr/>
<p>我们将分析这一行</p>
<pre><code>self.customViewController = [[ initWithNibName:@"CustomViewController"bundle:nil] autorelease];
</code></pre>
<p>你创建一个 <code>CustomViewController</code> 保留计数 == 1。<br/>
您在上面说 <code>autorelease</code> 所以保留计数稍后会为 0(可能是运行循环的结尾),但现在它仍然是 1 这就是为什么您仍然可以访问它,但将其视为 0 .<br/>
之后你说<code>self.customViewController</code>,那个属性是retain,所以retain count == 1。
你正在处理你的 dealloc 中的那个 1。<br/>
根据您的评论:</p>
<blockquote>
<p>// Balance out pushViewController's retain.</p>
</blockquote>
<p>你不<code>Balance</code>那些,你只平衡一个<code>你拥有的</code>。如果系统对您的对象进行保留,当系统不再需要它们时,它会释放它们。</p></p>
<p style="font-size: 20px;">关于iphone - 对象 dealloc 仅在 iOS 4.3 中崩溃,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/8638836/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/8638836/
</a>
</p>
页:
[1]