2015-05-29 133 views
0

我正在研究基于非ARC的非常古老的项目,并添加了一些基于ARC的新的UIViewController(可以通过在构建阶段设置-fobjc-arc标志来实现)。将非ARC转换为ARC

由于ARC和非ARC的混合使用,有时会出现memory leak,因为忘记在非ARC代码中释放某处,并且从这里切换到那里会导致此问题。

因此,我已决定将非ARC项目转换为ARC项目并通过以下操作完成;

Convert non-ARC to ARC project without recreate it

而且刚删除的dealloc,通过移除释放或自动释放有关的东西viewDidUnload函数内容。

成功完成后,似乎可以继续工作,但有时会崩溃,如发送到释放实例的消息。

我可以找到什么原因的崩溃,可以修复。

我想从这里知道的是;

  • 转换时,是否有任何具体的指导或规则来做到这一点,而不是简单地删除发布,autorelease相关的声明?

任何输入将非常感激!

回答

1

自动引用计数(ARC)是一个编译器的功能,提供的Objective-C对象的自动存储器管理。

参考这个网址: - 因为这

https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

如上所述,在ARC,我们不用加释放和保留方法会被编译器照顾。实际上,Objective-C的基本过程依然如此。它在内部使用保留和释放操作,使开发人员更容易编码,而不必担心这些操作,这将减少写入的代码量和内存泄漏的可能性。

还有另一个原理叫做垃圾回收,它与MRR一起用于Mac OS-X,但由于它在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 
0

只要按照事物

第1步:进入项目目标,然后单击构建阶段

步骤2:点击编译源代码在哪里可以看到所有的.m文件

第3步:双击它,白色b黄牛会随着光标出现。

第4步:在非弧文件所在的位置给出-fno-objc-arc。