当使用 64 位 iOS 模拟器时,下面的初始化函数崩溃并出现 EXC_BAD_ACCESS (code=1) 错误。有人知道为什么吗?以及如何正确修复它。
有关信息:“格式”不是零,它在 32 位模拟器和任何 32/64 位 iPhone/iPad 设备上工作得很好。
void Log (NSString * format, ...)
{
va_list argList;
va_start(argList, format);
NSLogv(format, argList);
NSString* string = [[NSString alloc] initWithFormat: format arguments: argList];
va_end(argList);
...
}
首先在 AppDelegate 中调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
Log(@"app options %@", launchOptions);
...
}
最佳答案
不知何故,A-Live 评论给了我一个主意,我找到了避免崩溃的方法。
我在同一个 va_start/va_end block 中使用了 argList 两次
[[NSString alloc] initWithFormat: format arguments: argList];
和
NSLogv(format, argList);
iOS 64 位模拟器似乎不喜欢它。不知道为什么它可以在任何其他平台(以及真实设备)中找到它。所以我通过制作两个不同的 bock 来修复它
va_list argList;
va_start(argList, format);
NSString* string = [[NSString alloc] initWithFormat: format arguments: argList];
va_end(argList);
va_start(argList, format);
NSLogv(format, argList);
va_end(argList);
希望对大家有所帮助。 如果有人知道为什么,我仍然很想听听。
关于ios - va_list 在 64 位模拟器上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833357/