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

时间:2014-08-04 21:52:28

标签: cocoa automatic-ref-counting autorelease

我正在使用Cocoa App。大多数应用程序都是ARC,但我使用的是适用于iOS的Amazon SDK版本,即MRC。 (我只对亚马逊课程做了一些更新,所以它适用于Cocoa)。

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

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

我遇到了来自亚马逊类的内存泄漏,但未能找到它的来源。

例如。让我们说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];
    }
}

@end

感谢。

1 个答案:

答案 0 :(得分:1)

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

只要您平衡retain / release并且正确命名转换,并且没有保留周期,它应该没问题。

如果你正确地做了,MRC不会改变任何东西,它应该像ARC一样。

阅读documentation了解何时使用它。