有谁知道以下代码是否有问题:
NSString *addchar = nil;
if (case1)
addChar = [[firstname substringToIndex:1] capitalizedString];
else
addChar = [[fullname substringToIndex:1] capitalizedString];
假设firstname和fullname不为null或为空。初始化NSString对象并将其设置为“nil”会导致一些可能的问题吗?它似乎导致我的应用程序冻结,但仅限于极少数用户,只有那些用户,但它与不同的输入字符串或空字符串没有任何关系。所以我试图找出问题,但我不知道
之间的区别NSString *addChar;
和
NSString *addChar = nil;
感谢。
答案 0 :(得分:7)
任何一种形式都是完全可以接受的。你遇到的问题是在其他地方。我建议使用Instruments进行一些代码分析,以找出发生此问题的位置。
答案 1 :(得分:5)
如果没有nil初始值设定项,在某些情况下,您的变量可能会使用垃圾进行初始化(无论以前在内存空间中是什么)。关于哪些类型的变量(基于范围,静态存储等)是自动初始化的,有一些特定的规则,但我总是发现显式初始化所有变量而不是记住这些规则更容易。
也就是说,因为你的if语句的两个分支都破坏了addChar的任何先前值,所以不应该有任何可以看到无效值的情况。但是显然初始化为nil肯定不会有任何损害,如果未来的维护者出现并更改代码路径,您可能会发现初始化程序会为您节省时间!
答案 2 :(得分:2)
如果未初始化变量,则应始终初始化为nil。
您可以将消息发送到零,但会忽略它们。
NSString * str = nil;
NSLog(@"%@", [str description]);
输出:
2009-12-15 08:59:03.352 x[11775] (nil)
当然,我不需要明确致电description
,我只是在向nil
展示电话。
答案 3 :(得分:1)
此处没有区别,因为您未在代码中阅读addChar
。此外,如果您没有明确地执行此操作,编译器有时可能会为您初始化addChar
nil
。(取决于addChar
声明的范围)。
请参阅this place上的相关问题。
答案 4 :(得分:0)
从现在开始,当您使用ARC时,强,弱和自动释放的堆栈变量初始化为nil
:
此外,自从黎明时代以来,在ObjC中,实例变量被初始化为零:
Are instance variables set to nil by default in Objective-C?