0

我的應用程序中的一個屏幕具有高分辨率背景,只需花費太多時間就可以加載較舊的設備。背景UIImage成爲殭屍代表

我的解決方案是預先載入代表中的圖像,然後重新使用它。

因此,我有一個屬性在我的委託:

@property (nonatomic, strong, retain) UIColor *fabricColor; 

,我加載didFinishLaunching圖像:

fabricColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg.png"]]; 

然而,當我嘗試在我的導航控制器引用delegate.fabricColor ,它是一個殭屍:

AppDelegate *dg = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
self.view.backgroundColor = dg.fabricColor; //Doesn't work 

我該如何預防發生這種情況,以便我可以使用fabricColor?

的幾個注意事項:

  • 我使用ARC是
  • 在我代理的dealloc的第一行是「[fabricColor發行]」

回答

2

使用屬性的設置值,以你的伊娃時,可以保留:

self.fabricColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg.png"]]; 

在你的代碼只是將自動釋放值你的實例變量沒有保留它 - 所以它會在你嘗試使用它之前一段時間後被釋放掉

+0

謝謝弗拉基米爾!這解決了整個問題。你能再次闡述爲什麼需要self.propertyName? (即使用自己和不使用它之間的區別是什麼?) – Eitan

+1

@ eitan27,+ colorWithPatternImage方法返回自動釋放對象,所以你需要保留它來保留它(否則它會像你的情況一樣被釋放) - 你可以做到這一點通過使用保留屬性(所以實際上自動合成的setFabricColor:方法將被調用,舊的ivar值將被釋放,並且新的將被保留)。通過屬性,您可以獲得很多內存管理功能,所以我儘可能使用它們 – Vladimir