的Objective-C:初始化变量为零
有谁知道,如果下面的代码可能是有问题的:的Objective-C:初始化变量为零
NSString *addchar = nil;
if (case1)
addChar = [[firstname substringToIndex:1] capitalizedString];
else
addChar = [[fullname substringToIndex:1] capitalizedString];
假设姓和全名不为空或空。初始化NSString对象并将其设置为'nil'会导致一些可能的问题?它似乎会导致我的应用程序冻结,但仅限于少数用户,并且仅限于那些用户,但它与任何输入字符串或空字符串没有任何关系。所以我试图孤立的问题,但我不知道
NSString *addChar;
和
NSString *addChar = nil;
感谢之间的差异。
两种形式都完全可以接受。你遇到的问题在别处。我建议使用仪器进行一些代码分析以找出发生此问题的位置。
这里没有什么区别,因为您在代码中没有读取addChar
。此外,如果您没有明确地执行(取决于addChar
的声明的范围),编译器有时可能会为您初始化addChar
至nil
。
在this place查看相关问题。
如果没有零初始化器,在某些情况下,您的变量可能会被垃圾初始化(无论以前是否在内存空间中)。关于哪些类型的变量(基于范围,静态存储等)有自动为你自动初始化的特定规则,但我总是发现,明确初始化所有变量而不是记住这些规则会更容易。
这就是说,因为你的if语句的两个分支都会打断addChar的任何以前的值,所以不应该出现任何可以看到无效值的情况。但它肯定不会伤害任何显式初始化为零,并且如果未来的维护者出现并更改代码路径,您可能会发现初始化程序可以节省您的时间!
如果变量未被初始化,则应始终初始化为零。
您可以发送消息到零,它们将被忽略。
NSString * str = nil;
NSLog(@"%@", [str description]);
输出:
2009-12-15 08:59:03.352 x[11775] (nil)
当然我并不需要调用description
明确,我只是演示调用nil
。
从现在起,当您使用ARC,强,弱,自动释放堆栈变量初始化为nil
:因为次曙光
此外,在ObjC实例变量初始化为零:
Are instance variables set to nil by default in Objective-C?
谢谢。这是令人沮丧的,因为我无法自己再现问题(它与我有的应用程序一起),它只影响一个小组,并且不会导致崩溃......它只会挂起......所以它不会生成一个崩溃日志。所以我不知道如何去追踪它。即使苹果的工程师似乎也无法找到问题。 – 2009-12-14 22:06:43
如果此代码在静态方法内运行,这有什么关系吗? – 2009-12-15 18:21:10