0

我的应用程序中的一个屏幕具有高分辨率背景,在旧设备上加载可能需要一点时间。

我的解决方案是在委托中预加载图像,然后重用它。

因此,我的委托中有一个属性:

@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 release]”
4

1 回答 1

2

在为您的 ivar 设置值时使用属性以保留:

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

在您的代码中,您只需将自动释放的值分配给您的实例变量而不保留它 - 因此它会在您尝试使用它之前的一段时间后被释放

于 2012-05-10T12:18:35.763 回答