簡體   English   中英

用於重寫Objective-C ARC中@property的代碼

[英]Code rewriting for getting rid of @property in objective-c ARC

在ARC之前,我曾經在不使用屬性的情況下在標頭中寫入變量:

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

然后在.m文件中,我用來保留/釋放文件:

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

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

在嘗試了一段時間的ARC之后,從某種意義上說,許多對象都被釋放了,我遇到了很多內存管理問題。 通過將ivar移至@property並使用點表示法,我找到了最快(但較臟)的解決方案。

@interface MyViewController : UIViewController

@property(strong) NSString *prop;

@end  

后來我添加了一個只讀屬性,因為不需要在控制器外部訪問。 我的問題是,在ARC環境中,我該如何重寫以上代碼以擺脫@property的困擾,尤其是我對視圖控制器的關注,它們在應用程序的生存期內可以多次分配/取消分配。

老實說,您的問題和偽代碼沒有多大意義。 在ARC中,[默認情況下] ivar是對象的強引用,因此,與所有其他ARC標准化的對象一樣,對ivar的分配/來自該ivar的分配也將得到管理。 如果在沒有ARC的情況下進行編譯,則不會。

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

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

如果您在ARC下遇到內存管理問題,聽起來好像其他地方出了問題。 您是否嘗試構建和分析? 您確定已打開所有文件的ARC嗎?

(請注意,我使用ARC已經有一段時間了,通常來說,這是一種“正常工作”的經驗。除了幾個編譯器錯誤以及NS和CF之間的脆弱邊界之外,我還沒有遇到任何嚴重的問題。碼)。

暫無
暫無

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

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