[英]convert non-ARC to ARC
我正在研究非常老的基於非ARC的項目,並添加了一些基於ARC的新UIViewController
(可以通過在構建階段設置-fobjc-arc標志來實現)。
由於ARC和非ARC的混合使用,有時memory leak
發生memory leak
,因為忘記了釋放非ARC代碼中的某個位置,而從此處切換到那里可能會導致這種情況。
因此,我決定將非ARC項目轉換為ARC項目,並按照以下步驟進行操作:
並通過刪除發布或自動發布相關內容刪除了dealloc,viewDidUnload函數內容。
成功完成后,似乎可以繼續進行,但有時會崩潰,例如將消息發送到已釋放實例。
我可以找到導致崩潰的原因並可以解決。
我想從這里知道的是;
任何輸入將不勝感激!
自動引用計數(ARC)是一種編譯器功能,可提供對Objective-C對象的自動內存管理。
請參閱此網址:-
如上所述,在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.