【原】关于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,如需转载请自行联系原作者


相关文章
|
5月前
|
存储 算法 编译器
【C++ 函数尾部返回】C++中的尾返回类型:探究auto func() -> ReturnType的魔力
【C++ 函数尾部返回】C++中的尾返回类型:探究auto func() -> ReturnType的魔力
153 1
|
12月前
|
开发框架 .NET C#
c#数组补充
c#数组的几个简单的补充
37 0
|
8天前
|
前端开发 JavaScript
前端基础(九)_this基本使用、this指向判断、改变this指向的方法
本文介绍了JavaScript中this的基本使用、this指向的判断以及改变this指向的方法。
22 1
前端基础(九)_this基本使用、this指向判断、改变this指向的方法
|
3月前
|
存储 固态存储 Serverless
函数计算操作报错合集之创建云函数并设置代码从Bucket获取时,返回403错误,该如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
12月前
|
存储 编译器 Go
Go语言隐藏的接口陷阱:nil值判断的各种误区
Go语言隐藏的接口陷阱:nil值判断的各种误区
135 0
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。
63 0
|
前端开发
前端学习案例11-数组遍历方法3-修改this指向
前端学习案例11-数组遍历方法3-修改this指向
74 0
前端学习案例11-数组遍历方法3-修改this指向
|
前端开发
前端学习案例4-this指向问题-隐式调用规则2
前端学习案例4-this指向问题-隐式调用规则2
71 0
前端学习案例4-this指向问题-隐式调用规则2
|
前端开发
前端学习案例3-this指向问题-隐式调用规则
前端学习案例3-this指向问题-隐式调用规则
70 0
前端学习案例3-this指向问题-隐式调用规则
|
前端开发
前端学习案例1-修改数据的时候修改循环数组数据1
前端学习案例1-修改数据的时候修改循环数组数据1
69 0
前端学习案例1-修改数据的时候修改循环数组数据1