objective-c:将变量初始化为nil

Z S*_*Z S 3 iphone objective-c

有谁知道以下代码是否有问题:

NSString *addchar = nil;

if (case1)
addChar = [[firstname substringToIndex:1] capitalizedString];
else
addChar = [[fullname substringToIndex:1] capitalizedString];
Run Code Online (Sandbox Code Playgroud)

假设firstname和fullname不为null或为空.初始化NSString对象并将其设置为"nil"会导致一些可能的问题吗?它似乎导致我的应用程序冻结,但仅限于极少数用户,只有那些用户,但它与不同的输入字符串或空字符串没有任何关系.所以我试图找出问题,但我不知道它们之间的区别

NSString *addChar;
Run Code Online (Sandbox Code Playgroud)

NSString *addChar = nil;
Run Code Online (Sandbox Code Playgroud)

谢谢.

Jos*_*zzi 7

任何一种形式都是完全可以接受 你遇到的问题是在其他地方.我建议使用Instruments进行一些代码分析,以找出问题发生的位置.


Ste*_*ker 5

如果没有nil初始化程序,在某些情况下,您的变量可能会使用垃圾进行初始化(以前在内存空间中都是如此).关于哪些类型的变量(基于范围,静态存储等)是自动初始化的,有一些特定的规则,但我总是发现显式初始化所有变量而不是记忆这些规则更容易.

也就是说,因为你的if语句的两个分支都破坏了addChar的任何先前值,所以不应该存在任何可以看到无效值的情况.但是,显然初始化为nil肯定不会伤害任何东西,如果未来的维护者出现并更改代码路径,您可能会发现初始化程序会为您节省!