释放对象导致 exc_bad_access

Posted

技术标签:

【中文标题】释放对象导致 exc_bad_access【英文标题】:releasing object results in exc_bad_access 【发布时间】:2011-10-05 04:43:25 【问题描述】:

我对下面的代码有点困惑。我是一名优秀的士兵,通过在以下片段中释放 tmp 对象来点缀 i 并穿过 t。但是,在运行时,我得到“EXC_BAD_ACCESS”

    -(void) aMethod 
            .
            .
        if (testMode)          
            MyClass *tmp = [[MyClass alloc] init];
            [tmp aMethodInTheClass];
            [tmp release];
        
            .
            .
    

如果我删除 [tmp release] 语句,则不会生成错误。

是否不需要释放,因为 'tmp' 对象的范围在内部 if 条件之后停止?

谢谢。

【问题讨论】:

似乎您的应用程序需要一个指向它的指针!在 .h 中定义该变量在你的方法中实例化它并在应用程序 dealloc 方法中释放它 但是我不想为这个临时变量引入实例变量。 检查我的答案是否可行! 【参考方案1】:

试试这个,

-(void) aMethod 
            .
            .
        if (testMode)          
            MyClass *tmp = [[MyClass alloc] autorelease];
            [tmp aMethodInTheClass];
        
            .
            .
    

祝你好运!

【讨论】:

以上是关于释放对象导致 exc_bad_access的主要内容,如果未能解决你的问题,请参考以下文章

从向量中擦除对象会导致双重释放[重复]

Objective C 方法 removeFromSuperview 导致消息被发送到释放的对象

为啥在 Objective-C 中执行 alloc 和 init 在单独的语句中会导致对象根据 Xcode 静态分析器被释放?

这会导致保留周期吗

Python:删除对象和释放空间

iOS自动释放池_原理_如何工作