cocoa - Xcode/Cocoa ARC 和 MRC 类。 MRC 自动释放会导致 ARC 类中的内存泄漏吗?

标签 cocoa automatic-ref-counting autorelease

我正在开发一个 Cocoa 应用程序。大多数应用程序都是 ARC,但我使用的是适用于 iOS 的 Amazon SDK 版本,即 MRC。 (我只对 amazon 类进行了一些更新,因此它可以与 Cocoa 一起使用)。

我已通过 -fno-objc-arc 对使用的所有亚马逊文件禁用 ARC。

如果我在我的 ARC 类之一中使用 Amazon SDK 中的 MRC 类之一。我需要用 @autorelease 包围它吗?

我遇到了 Amazon 类的内存泄漏问题,但无法找到其根源。

例如。假设 MRC 类是这样的:(这是为了简化我的要求而设计的):

@implementation MyMRCClass
- (void) doStuff {
    NSArray * tmp = [[[NSMutableArray alloc] init] autorelease];
}
@end

然后假设我在 ARC 中的某个地方使用该类:

@implementation MyARCClass
- (void) doSomethingWithMyClass {
    [self.myClass doStuff];
}
@end

我需要使用 @autorelease 包装对 MyMRCClass 的调用吗?

@implementation MyARCClass
- (void) doSomethingWithMyClass {
    @autorelease {
        [self.myClass doStuff];
    }
}

@结束

谢谢。

最佳答案

除非它是新线程的入口点,否则不需要@autorelease。应在主函数中为您创建主线程上的自动释放池。

只要你平衡了 retain/release 和正确的命名转换,并且没有保留周期,就应该没问题。

如果操作正确,MRC 不会改变任何内容,它的行为应该与 ARC 一样。

阅读documentation何时使用它。

关于cocoa - Xcode/Cocoa ARC 和 MRC 类。 MRC 自动释放会导致 ARC 类中的内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25128186/

相关文章:

ios - 使用 block 和 ARC 导致 "message sent to deallocated instance"错误

swift - 我们是否应该始终在 Swift 中的闭包内使用 [unowned self]

ios - 为什么将 "self"放入 GCD block 中会导致内存泄漏?

ios - ARC dealloc 在主线程以外的线程上调用

iphone - 为什么在[NSMutableArray array]之后需要此自动释放功能以避免内存泄漏?

objective-c - Objective-C : How to release delegates in this situation

cocoa - 在 NSTableView 中显示图像

objective-c - 应用程序中可能使用的嵌入式数据库引擎

cocoa - NSArrayController 无法与 NSTableView 的 NSMutableDictionary 一起使用

objective-c - 无法在应用程序启动时隐藏 NSFontPanel