gpt4 book ai didi

objective-c - NSString 格式化,访问错误

转载 作者:行者123 更新时间:2023-11-28 19:13:36 24 4
gpt4 key购买 nike

我在格式化字符串时收到 EXC_BAD_ACCESS。

NSString *object = [[NSUserDefaults standardUserDefaults] stringForKey:@"ObjectNumber"];
NSString *pin = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"Pin%i ",object.intValue]];
NSString *msg = [NSString stringWithFormat:@"%@N", pin];

NSString *msg2 = @"0001N";

NSLog(@"Sending %@", msg);

tcpConnection *Obj = [tcpConnection alloc];
[Obj loadUpConnection:msg];

如果我使用 msg2 一切正常。但是,如果我使用 msg,即使 NSLog 正确打印 msg,它也会得到 exc_bad_access。

最佳答案

我怀疑您的 loadUpConnection: 方法没有保留其参数。

关于objective-c,看来你要学的东西很多。

我担心这会让您感到困惑而不是帮助,但是 msg2 变量指向字符串 "0001N" 的静态实例(因为您将它硬编码在编译时系统会创建一个静态实例来使用)。这就是为什么当您使用 msg2 时它不会崩溃,但是当您使用 msg 时它会崩溃。 msg 指向一个动态分配的实例。返回给您的引用是“autoreleased”,这意味着它将在将来的某个时间点(通常在运行循环迭代结束时)被释放。如果您的 loadUpConnection: 方法不保留它的参数,那么 msg 字符串将在您尝试使用它之前被释放,从而导致 EXC_BAD_ACCESS错误。因为 msg2 是一个静态实例,它永远不会被释放,因此它不会崩溃。

我唯一的建议是继续学习 - 拿起一本书,我推荐 Stephen Kochan 的“Programming in Objecive-C”,或 Aaron Hillegass 的“iPhone Programming A Big Nerd Ranch Guide”。

关于objective-c - NSString 格式化,访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642014/

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