2012-02-14 71 views
0

我以前寫在標題變量不使用的特性:代碼重寫爲在Objective-C ARC擺脫@property的ARC之前

@interface MyViewController : UIViewController { 
    NSString *prop1; 
} 
@end 

然後在.m文件我用保留/釋放:

-(void)initVar { 
    prop = @"initialized variable"; 
    [prop retain]; 
} 

-(void)dealloc{ 
    [prop release]; 
} 

在嘗試過ARC一段時間後,我得到了很多內存管理問題,在某種意義上說,許多對象被釋放。我通過將ivar移動到@property並使用點符號找到了最快(但很髒)的解決方案。

我後來添加了readonly屬性,因爲沒有必要訪問控制器外部。 我的問題是,在ARC環境中,我如何重寫上面的代碼來ged擺脫@property,特別是我關心的是視圖控制器,他們可以在應用程序的生命期間多次獲取alloc/dealloc。

回答

2

老實說,你的問題和你的僞代碼沒有多大意義。在ARC下,伊娃將是一個強大的對象[默認情況下],因此,與該伊娃相關的分配將像其他所有ARC對象一樣進行管理。如果你沒有ARC編譯,它不會。

您是否使用ivars或屬性代碼是一個樣式問題,與內存管理無關[在ARC下 - 您需要手動管理ivar引用]。

您的初始化程序示例和-dealloc在您的問題中都是錯誤的,但這可能只是因爲它們是快速筆記而不是真正的代碼。

如果你在ARC下有內存管理問題,聽起來像其他事情出了問題。你有沒有嘗試構建和分析?你確定你打開ARC的所有文件? (注意,我已經使用了ARC很長一段時間了,一般來說,這只是一種「正常工作」的體驗。除了幾個編譯器錯誤和脆弱的邊界之外,我還沒有遇到任何嚴重的問題NS和CF代碼之間)。

+0

是的,它只是快速的代碼。爲什麼dealloc與非弧編譯器錯誤?我同意這是一個風格問題,這就是爲什麼我想刪除所有@prop。所以,據我瞭解,在ARC頭文件中聲明var時,應該讓我的內存管理安全嗎? – Leonardo 2012-02-14 07:51:04