我试图使用NSLog来打印控制台消息。问题是有时我在调用它时会收到“EXC_BAD_ACCESS”错误
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
NSLog(@"Working test %d", toInterfaceOrientation);
NSLog(@"EXC_BAD_ACCESS %@", toInterfaceOrientation);
}
这里我只想看看传递给函数的参数包含了什么。第一个NSLog工作正常。第二个导致“EXC_BAD_ACCESS”,我不明白为什么?。
答案 0 :(得分:13)
%@
仅适用于对象。而toInterfaceOrientation不是一个对象。
正如您在UIInterfaceOrientation
的文档中看到的,它只是enum。
答案 1 :(得分:6)
第二次NSLog崩溃,因为您尝试将整数打印为NSObject(%@而不是%d)。 UIInterfaceOrientation是一个不起作用的枚举。
答案 2 :(得分:2)
EXC_BAD_ACCESS通常意味着您正在尝试调用已从内存中释放的对象。尝试在环境变量中启用NSZombies以查看它导致问题的位置
在这里回答类似的问题: How to use NSzombie in xcode?
答案 3 :(得分:2)
%@仅用于对象。
UIInterfaceOrientation
是一个枚举:
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/c_ref/UIDeviceOrientationPortrait
当你使用%@时,它基本上是在调用:
[UIInterfaceOrientation descriptionWithLocale]
显然这会导致EXC_BAD_ACCESS
答案 4 :(得分:1)
toInterfaceOrientation是一个枚举变量...所以如果要打印它的日志,你必须使用%d ......。和%@主要用于对象......
使用此代码:
NSLog(@“EXC_BAD_ACCESS:%d”,toInterfaceOrientation);