我正在开发基于非ARC的非基于ARC的项目,并添加了一些基于ARC的新UIViewController
(可以通过在构建阶段设置-fobjc-arc标志来实现)。
由于混合使用ARC和非ARC,有时会出现memory leak
,因为忘记在非ARC代码中释放,并从此处切换到那里可能会导致此问题。
因此,我决定将非ARC项目转换为ARC项目,并按照以下步骤进行;
Convert non-ARC to ARC project without recreate it
刚刚通过删除释放或自动释放相关的东西删除了dealloc,viewDidUnload函数内容。
成功完成之后,似乎可以继续工作,但有时会像发送到解除分配的实例的消息一样崩溃。
我可以找到崩溃的原因,并且可以修复。
我想从这里知道的是;
任何输入都将非常感谢!
答案 0 :(得分:1)
自动引用计数(ARC)是一种编译器功能,可提供Objective-C对象的自动内存管理。
请参阅此网址: -
如上所述,在 ARC 中,我们不需要添加release和retain方法,因为编译器会对此进行处理。实际上,Objective-C的基本过程仍然是相同的。它在内部使用保留和释放操作,使开发人员更容易编码而无需担心这些操作,这将减少编写的代码量和内存泄漏的可能性。
还有一个名为垃圾收集的原则,它在Mac OS-X中与MRR一起使用,但由于它在OS-X Mountain Lion中被弃用,因此尚未与MRR一起讨论。此外,iOS对象从未拥有垃圾收集功能。使用 ARC ,OS-X中也没有使用垃圾收集。
这是一个简单的ARC示例。请注意,这不适用于在线编译器,因为它不支持 ARC 。
#import <Foundation/Foundation.h>
@interface SampleClass:NSObject
- (void)sampleMethod;
@end
@implementation SampleClass
- (void)sampleMethod
{
NSLog(@"Hello, World! \n");
}
- (void)dealloc
{
NSLog(@"Object deallocated");
}
@end
int main()
{
/* my first program in Objective-C */
@autoreleasepool{
SampleClass *sampleClass = [[SampleClass alloc]init];
[sampleClass sampleMethod];
sampleClass = nil;
}
return 0;
}
获得以下输出...
demo :- Hello, World!
demo :- Object deallocated
答案 1 :(得分:0)
xcode可以单独完成转换。在大多数情况下,它足以删除这些陈述。您需要检查属性声明@property(nonatomic, weak/strong/copy)
。
答案 2 :(得分:0)
按照事情
步骤1:转到Project Target并单击Build Phases
步骤2:单击编译源。您可以在其中看到所有.m文件
步骤3:双击它,光标会出现白框。
步骤4:在非弧文件的位置给出-fno-objc-arc。