gpt4 book ai didi

ios - 函数调用后指针改变

转载 作者:可可西里 更新时间:2023-11-01 06:06:59 25 4
gpt4 key购买 nike

关于我的问题,这里有一些简单的要点;

  • 如果重要,使用 XCode 6.0.1,没有优化的 llvm 6.0(DEBUG)
  • 这发生在一个单独的线程上;

    self.ioThread = [NSThread.alloc initWithTarget:self selector:@selector(initData) object:nil].autorelease;
  • 不使用 ARC(应该无关紧要)

  • 第一个代码;

    if (_updatedAt) // A simple C function call
    data[@"updatedAt"] = RFC3339DateString(_updatedAt);
  • RFC3339DateString 函数;

    NSString* RFC3339DateString(NSDate* date) {
    if (!date || ![date isKindOfClass:NSDate.class]) return nil;
    NSDateFormatter *rfc3339DateFormatter = NSDateFormatter.new.autorelease;
    NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"].autorelease;

    [rfc3339DateFormatter setLocale:enUSPOSIXLocale];
    [rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    [rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    return [rfc3339DateFormatter stringFromDate:date]; // point of crash.
    }

所以,在我标记为“崩溃点”的那一行,它说;

-[__NSCFString timeIntervalSinceReferenceDate]:发送到实例 0x7fdc2870 的无法识别的选择器

在这种情况下有几件奇怪的事情我无法解决;

  • 在函数的第一行,我已经对 date 对象进行了类型检查。
  • 在调试器上,当我输入 po datep date 时,这些是我得到的结果;

    (lldb) po date
    stamp

    (lldb) p date
    (NSDate *) $11 = 0x7fdc2870 @"stamp"
  • 当我转到调用 RFC3339DateString 函数并说 p _updatedAtpo updatedAt 时;

    (lldb) p _updatedAt
    (NSDate *) $12 = 0x7fd88a10 class name = __NSDate
    (lldb) po _updatedAt
    2014-09-27 06:37:33 +0000

我不明白指针在中间是如何改变的。有人了解情况吗?

截图1; http://cl.ly/image/1n1l1E1i2a3y

截图2; http://cl.ly/image/2A0s3S2J0S1P

围绕我调用 RFC3339DateString 函数的代码的汇编代码; http://pastie.org/private/e7xzc3ntfz0p0d95g5hzw

最佳答案

我怀疑 _updatedAt 被覆盖了。有时它包含一个 NSDate,有时包含一个 NSString。添加一个观察点以查看它被写入的位置。

此外,您永远不应从 RFC3339DateString() 返回 nil,因为这会导致 [NSMutableDictionary addObject:forKey:] 中出现异常。

最后,您不需要在该日期格式字符串中使用太多引号,只需围绕 'T''Z' 即可。

关于ios - 函数调用后指针改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com