菜鸟教程小白 发表于 2022-12-12 16:58:20

iphone - super dealloc EXC_BAD_ACCESS 错误


                                            <p><p>在分析我们的项目时,Xcode 在自定义 UIBarButtonItem 处带有一个 posibe 泄漏通知。
我修复了泄漏,但是在第二次加载 View 时, 给出了 EXC_BAD_ACCESS 错误。</p>

<p>从 UIBarButtonItem 中移除自动释放(因此返回警告):</p>

<pre><code>self.navigationItem.rightBarButtonItem = [[ initWithCustomView:toolbar] autorelease];
</code></pre>

<p>在重新加载屏幕时没有问题。</p>

<p>自定义 UIBarButtonItem 和 dealloc 代码:</p>

<pre><code>- (void)viewDidLoad
{
    ;

    // create a toolbar to have the buttons at the right side of the navigationBar
    UIToolbar* toolbar = [ initWithFrame:CGRectMake(0, 0, 150, 44.01)];
    toolbar.tintColor = ;
    ;

    // create the array to hold the buttons, which then gets added to the toolbar
    NSMutableArray* buttons = [ initWithCapacity:4];


    // Create a comments button
    propertiesButton = [
                        initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(properties)];
    ;
    ;

    // Create a comments button
    commentaryButton = [
                        initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(comments)];
    ;
    ;

    // create a versions button
    versionsButton = [
                      initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(versions)];
    ;
    ;

    // create a save button
    downloadButton = [
                      initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:nil action:@selector(download)];
    ;
    ;

    // stick the buttons in the toolbar
    ;

    ;

    // and put the toolbar in the nav bar
    self.navigationItem.rightBarButtonItem = [[ initWithCustomView:toolbar] autorelease];
    ;
}

- (void)dealloc
{
    ;
    ;
    ;
    ;
    ;
    ;
    ;
}
</code></pre>

<p>使用 NSZombieEnabled 我得到了</p>

<pre><code>&#39;2011-08-01 10:30:36.571 ProjectName *** -: message sent to deallocated instance 0x1fb330&#39;
</code></pre>

<p>我们不确定如何解决问题。</p>

<p>提前谢谢你。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您正在发布 propertiesButton、downloadButton、versionsButton、commentaryButton 两次。第一次在 <code>viewDidLoad</code> 中,再次在 <code>dealloc</code> 中。</p>

<p>您不必在 <code>dealloc</code> 中释放它们,因为您已经在 <code>viewDidLoad</code> 中释放了它们。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - super dealloc EXC_BAD_ACCESS 错误,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/6909918/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/6909918/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - super dealloc EXC_BAD_ACCESS 错误