我的 .h 文件中有这个属性:
@property (nonatomic, readwrite) NSInteger gameMode;
我在相应的 .m 文件中有这个 setter:
- (void)setGameMode:(NSInteger)mode {
self.gameMode = mode;
NSLog(@"game mode %d", self.gameMode);
}
在我的 View Controller 中,我有这个函数可以在我触摸按钮时调用 setter :
- (IBAction)touchCardButton:(UIButton *)sender {
if ([self.game disableModeChooseAtFirstTouch]) {
[self.game setGameMode:self.modeSegmentedControl.selectedSegmentIndex];
}
但是当我在模拟器中点击按钮时,它会停在这里:
self.gameMode = mode;
并说:
Thread 1: EXC_BAD_ACCESS
更新: 如果我在它之前添加一个 NSLog,像这样:
- (void)setGameMode:(NSInteger)mode {
NSLog(@"game mode %d", self.gameMode);
self.gameMode = mode;
NSLog(@"game mode %d", self.gameMode);
}
它将继续打印game mode: 0
谁能告诉我为什么?谢谢!
最佳答案
是的,我可以告诉你原因。你在 setter 中调用 setter,导致无限递归、堆栈溢出和崩溃。
您的 setGameMode 方法应为:
- (void)setGameMode:(NSInteger)mode
{
_gameMode = mode; //Don't use the setter in the implementation of the setter.
NSLog(@"game mode %d", self.gameMode);
}
关于ios - xcode objective-c ,EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347526/