2015-05-29 69 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。

相關問題