格式化字符串时,我得到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它会得到exc_bad_access,即使NSLog正确打印了msg。
答案 0 :(得分:3)
我怀疑您的loadUpConnection:
方法未保留其参数。
关于objective-c,你似乎有很多东西要学习。
我担心这会让你感到困惑,但msg2
变量指向字符串"0001N"
的静态实例(因为你在编译时硬编码它,系统会创建一个静态实例)使用)。这就是使用msg2
时不会崩溃的原因,但是当您使用msg
时会崩溃。 msg
指向动态分配的实例。返回给你的引用是“自动释放”,这意味着它将在未来的某个时刻释放(通常在运行循环迭代结束时)。如果您的loadUpConnection:
方法未保留其参数,则在您尝试使用msg
字符串之前将释放该EXC_BAD_ACCESS
字符串,从而导致msg2
错误。因为{{1}}是一个静态实例,所以它永远不会被释放,因此它不会崩溃。
我唯一的建议是继续学习 - 拿起一本书,我推荐Stephen Kochan的'Programming in Objecive-C',或者Aaron Hillegass的'iPhone Programming A Big Nerd Ranch Guide'。
答案 1 :(得分:1)
你必须初始化你* Obj。
tcpConnection *Obj = [tcpConnection alloc] init
...