我正在制作一个需要在每次点击重新交易按钮时重置的纸牌游戏。为此,我使用以下逻辑:
- (IBAction)redealClicked:(UIButton *)sender {
self.cardGame = NULL;
self.cardGame; //re-initialize before updating UI
[self updateUI];
}
我在getter中做了懒惰的实例化,所以我想我可以强迫它懒惰地实例化以重置我的游戏。 XCode正在给我一个警告,说吸气剂不应该用于副作用。从技术上讲,这正是我正在做的事情,但懒惰的实例化是一个特例吗?
至于为什么我要包含“self.cardGame”这一行,而不是让它在程序出现时懒惰实例化:我在[self updateUI]首次访问之前翻转一些布尔值访问self.cardGame。
答案 0 :(得分:2)
在getter中进行延迟加载就可以了。
您发布的代码无需强制延迟加载。只是做:
- (IBAction)redealClicked:(UIButton *)sender {
self.cardGame = NULL;
[self updateUI];
}
据推测,updateUI
方法会在某个时刻访问该属性。第一次访问将执行延迟加载。简单。
请记住,由于延迟加载,您不应该直接访问_cardGame
ivar,cardGame
getter方法除外。