ios – va_list在64位模拟器上崩溃

前端之家收集整理的这篇文章主要介绍了ios – va_list在64位模拟器上崩溃前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用64位iOS模拟器时,下面的init函数崩溃,出现EXC_BAD_ACCESS(code = 1)错误.谁会知道为什么?以及如何正确地解决它.

有关信息:’format’不是零,它可以在32位模拟器和任何32/64位iPhone / iPad设备上正常工作.

  1. void Log (NSString * format,...)
  2. {
  3. va_list argList;
  4. va_start(argList,format);
  5. NSLogv(format,argList);
  6. NSString* string = [[NSString alloc] initWithFormat: format arguments: argList];
  7. va_end(argList);
  8.  
  9. ...
  10. }

在AppDelegate中称为第一件事

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. Log(@"app options %@",launchOptions);
  4. ...
  5. }

解决方法

不知怎的,A-Live评论给了我一个想法,我发现了如何避免崩溃.

我在同一个va_start / va_end块中使用了两次argList

  1. [[NSString alloc] initWithFormat: format arguments: argList];

  1. NSLogv(format,argList);

似乎iOS 64位模拟器不喜欢它.不知道为什么它只能在任何其他平板电脑(以及真实设备)中找到它.所以我通过制作这样的两个不同的bock来修复它

  1. va_list argList;
  2.  
  3. va_start(argList,format);
  4. NSString* string = [[NSString alloc] initWithFormat: format arguments: argList];
  5. va_end(argList);
  6.  
  7. va_start(argList,format);
  8. NSLogv(format,argList);
  9. va_end(argList);

希望它会帮助某人.如果有人知道为什么,我仍然很想知道它.

猜你在找的iOS相关文章