我正在开发一个 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/