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