簡體   English   中英

將非ARC轉換為ARC

[英]convert non-ARC to ARC

我正在研究非常老的基於非ARC的項目,並添加了一些基於ARC的新UIViewController (可以通過在構建階段設置-fobjc-arc標志來實現)。

由於ARC和非ARC的混合使用,有時memory leak發生memory leak ,因為忘記了釋放非ARC代碼中的某個位置,而從此處切換到那里可能會導致這種情況。

因此,我決定將非ARC項目轉換為ARC項目,並按照以下步驟進行操作:

將非ARC轉換為ARC項目而無需重新創建

並通過刪除發布或自動發布相關內容刪除了dealloc,viewDidUnload函數內容。

成功完成后,似乎可以繼續進行,但有時會崩潰,例如將消息發送到已釋放實例。

我可以找到導致崩潰的原因並可以解決。

我想從這里知道的是;

  • 轉換時,是否有任何特定的指南或規則來執行此操作,而不是簡單地刪除與發布,自動發布相關的語句?

任何輸入將不勝感激!

自動引用計數(ARC)是一種編譯器功能,可提供對Objective-C對象的自動內存管理。

請參閱此網址:-

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

如上所述,在ARC中 ,我們不需要添加release和keep方法,因為編譯器會注意這一點。 實際上,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

xcode可以單獨完成大部分轉換。 在大多數情況下,它足以刪除此語句。 您需要檢查屬性聲明@property(nonatomic, weak/strong/copy)

這是一個小教程: https : //objectpartners.com/2013/07/17/converting-an-ios-project-to-use-arc-automatic-reference-counting/

隨隨便便

步驟1:轉到項目目標,然后單擊構建階段

步驟2:點擊“編譯源代碼”。您可以在此處查看所有.m文件

第三步:雙擊鼠標,出現白色框。

步驟4:在非arc文件所在的位置提供-fno-objc-arc。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM