【问题标题】:Crash in Release Mode while generating NSString with arguments使用参数生成 NSString 时在发布模式下崩溃
【发布时间】:2017-04-13 13:10:39
【问题描述】:

我已经编写了具有几个 Log 函数的 Log 助手类。在调试模式下一切正常。但是当我运行我的代码是发布模式时它崩溃了。下面是代码sn-p:

+ (void)info:(NSString *)format, ...
{
    va_list args;
    va_start(args, format);
    va_end(args);

    NSString *formatedMessage = [[NSString alloc] initWithFormat:[NSString stringWithFormat:@"INFO %@",format] arguments:args];
}

创建 formatedMessage 应用程序时出现崩溃,并出现以下异常:

如果我设置

构建设置->优化级别为 NONE

在发布模式下一切正常。用优化级别修复的任何想法到

最快-最小

处于释放模式

【问题讨论】:

  • @rmaddy 你太棒了。
  • 但是为什么我无法理解为什么它曾经使用旧版本的 xcode
  • 可能是内存优化。它曾经工作过,这完全是幸运。这类似于在对象被释放后使用对象指针。这样做可能会在适当的条件下发挥作用。

标签: ios objective-c xcode8 ios10.3


【解决方案1】:

您似乎打电话给va_end 太快了。试试:

+ (void)info:(NSString *)format, ...
{
    va_list args;
    va_start(args, format);

    NSString *formatedMessage = [[NSString alloc] initWithFormat:[NSString stringWithFormat:@"INFO %@",format] arguments:args];

    va_end(args);
}

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2020-02-09
    • 2018-12-31
    • 1970-01-01
    相关资源
    最近更新 更多