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发行]”
谢谢弗拉基米尔!这解决了整个问题。你能再次阐述为什么需要self.propertyName? (即使用自己和不使用它之间的区别是什么?) – Eitan
@ eitan27,+ colorWithPatternImage方法返回自动释放对象,所以你需要保留它来保留它(否则它会像你的情况一样被释放) - 你可以做到这一点通过使用保留属性(所以实际上自动合成的setFabricColor:方法将被调用,旧的ivar值将被释放,并且新的将被保留)。通过属性,您可以获得很多内存管理功能,所以我尽可能使用它们 – Vladimir