我有一个方法,当我遇到一个"空"字符串时,我想确保我做一些特别的事情.当它实际上有一个字符串,或者当我专门将它设置为"nil"或"NULL"时,它工作得很好,但是当我尝试测试未初始化的NSString时它会崩溃.我该如何处理这种情况?
例如:
-(void) WhyDoICrash
{
NSString *foo;
// Some other stuff...
// foo should be considered "empty"
if (foo == nil || foo == NULL || [foo length] == 0)
{
// whatever
}
}
Run Code Online (Sandbox Code Playgroud)
=============编辑===================
好的,上面只是一个显示问题的简单例子.我实际上正在使用NSString的类别,这意味着我得到的一些(好的,但不适用)建议无法使用.这是我的确切代码:
#pragma mark - NSString Category
@interface NSString (NullOrEmptyTesting)
+(BOOL) isNullOrEmpty: (NSString*)input;
@end
@implementation NSString (NullOrEmptyTesting)
+(BOOL) isNullOrEmpty: (NSString*)input
{
return (input == (id)[NSNull null] || input.length == 0);
}
@end
Run Code Online (Sandbox Code Playgroud)
小智 5
(...)但是当我尝试测试未初始化的NSString时崩溃了.我该如何处理这种情况?
您可以通过初始化相应的变量来处理它,例如
NSString *foo = nil;
Run Code Online (Sandbox Code Playgroud)
在C和Objective-C中,自动变量不会初始化为0 - 您无法对该变量中包含的值进行任何假设.看到这个问题:C中声明的未初始化变量会发生什么?它有价值吗?
也,
if (foo == nil || foo == NULL || [foo length] == 0)
Run Code Online (Sandbox Code Playgroud)
相当于:
if (foo == nil || [foo length] == 0)
Run Code Online (Sandbox Code Playgroud)
并且,由于Objective-C支持消息传递nil对象,因此测试通常是:
if ([foo length] == 0)
Run Code Online (Sandbox Code Playgroud)
只要.
请注意,Objective-C会在分配实例时将实例变量初始化为0.
| 归档时间: |
|
| 查看次数: |
3757 次 |
| 最近记录: |