【原】关于nil的几点认识,居然都现在才发现~~

简介:

接上一篇随笔的内容,“==”是比较两个对象内存地址是否相等,“isEqual:”则是比较对象的内容是否相等。

所以现在看几个sample:

复制代码
    NSArray * array = [NSArray array];
    if (array !=  nil) {
        NSLog(@"array is not nil!~~");
    }//not nil
    
    NSArray *array2 = [NSArray array];
    if ([array2 isEqual:nil] == NO) {
        NSLog(@"array2 is not nil!~~");
    }//not nil
    
    NSArray * array3 = [[NSArray alloc] init];
    if (array3 != nil) {
        NSLog(@"array is not nil!~~");
    }//not nil
    [array3 release];
    
    NSString *str;
    if (str != nil) {
        NSLog( @"str is not nil!~");
    }
    
    NSString *str2;
    if ([str2 isEqual:nil] ==  no) {
        NSLog(@"str2 is not nil!~");
    }
复制代码

上面的例子所有的结果都是“is not nil”。我的分析是,array == nil判断的是array的地址是否为空,也就是系统有没有分配给array内存。显然,已经经过[NSArray array]或者[[NSArray] array]了,自然就有了内存地址。如果怀疑array对象与普通的string对象可能会有区别,那就看最后两个例子。str以及str2都没有显式地分配内存,但是地址依旧不为空。

所以,我们得出一个结论,以后想判断一个对象是否为空一定要谨慎,不能简简单单地“*** !=  nil“就搞定了。比如,若想判断array等是否含有内容,就应该用,if([array count] != 0)而不是用 if(array != nil)或者if([array isEqual:nil])来判断。

本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/archive/2012/04/10/2440190.html,如需转载请自行联系原作者


相关文章
|
6月前
|
存储 算法 编译器
【C++ 函数尾部返回】C++中的尾返回类型:探究auto func() -> ReturnType的魔力
【C++ 函数尾部返回】C++中的尾返回类型:探究auto func() -> ReturnType的魔力
186 1
|
开发框架 .NET C#
c#数组补充
c#数组的几个简单的补充
42 0
|
1月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
|
4月前
|
存储 固态存储 Serverless
函数计算操作报错合集之创建云函数并设置代码从Bucket获取时,返回403错误,该如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
存储 编译器 Go
Go语言隐藏的接口陷阱:nil值判断的各种误区
Go语言隐藏的接口陷阱:nil值判断的各种误区
169 0
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。
69 0
普通函数中的this指向问题解决方案call
普通函数中的this指向问题解决方案call
53 0
普通函数中的this指向问题解决方案apply
普通函数中的this指向问题解决方案apply
64 0
普通函数中的this指向问题解决方案apply
普通函数中的this指向问题解决方案apply
53 0
|
前端开发
前端学习案例11-数组遍历方法3-修改this指向
前端学习案例11-数组遍历方法3-修改this指向
77 0
前端学习案例11-数组遍历方法3-修改this指向