1、前言
判断字符串是否为空的情况,一般判断的逻辑如下:
- 是否为nil
- 是否是NSNull
- 是否去掉空格之后长度为0
在某书看到如下代码:
1 | @interface NSString (Util) |
2、判断NSString为空的问题
大家继续之前,可以认真看看上面的代码有没有问题?或者有没有优化的空间?
原作者表示里面有一个坑,调用者为nil时:
1 | NSString *str = (网络解析出来的数据,解析结果为nil); |
就是说,如果用实例方法进行判断为空,因为实例对象为空时,根据objc的动态性,向空对象发消息会直接返回nil,并不会找到实例方法进行调用。所以,要判断字符串为空,只能传入字符串对象
(可能为空),进行判断。
1 |
|
1 |
|
其中NULL、nil、Nil、NSNull的区别:
标志 | 值 | 含义 |
---|---|---|
NULL | (void *)0 | C指针的字面零值 |
nil | (id)0 | Objective-C对象的字面零值 |
Nil | (Class)0 | Objective-C类的字面零值 |
NSNull | [NSNull null] | 用来表示零值的单独的对象 |
3、总结
通过这个例子,可能看出看似简单的问题,其实都有非常值得探究的深渊!希望自己不要自尽为是,虚心学习,考虑问题有更多角度,细致严谨!
4、参考引用
> 注:本文首发于 [iHTCboy's blog](http://iHTCboy.com),如若转载,请注来源