• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Objective-C中Nil和nil

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

nil和C语言中的NULL一样,在.h中定义。nil表示一个Objective-C对象,这个对象的指针指向空(没有东西就是空),定义如下:

#define nil 0

   首字母大写的Nil 和nil有一点不一样,Nil定义一个指向空的类,是class,而不是对象。

#define Nil 0

下面看一个具体的实例:

#import <Foundation/Foundation.h>

 @interface ClassA : NSObject

-(void)print;

@end

#import "ClassA.h"

@implementation ClassA

-(void)print

{

    NSLog(@"I'm ClassA!");

}

@end

#import <Foundation/Foundation.h>

#import "ClassA.h"

 

int main(int argc, const char * argv[])

{

    @autoreleasepool {   

        ClassA *classA = [ClassA new];

        classA = nil;

        if (classA == nil) {

            NSLog(@"classA is nil");

        }

    }

    return0;

}

程序的结果是:classA is nil

  创建了一个ClassA的对象classA,并且正常初始化,这时候对象不为空。接着使用一条语句将它设置为空。然后判断该对象是否为nil。如果是,就会打印出一条语句在控制台上,所以得到上述结果。

  在Objective-C中,nil对象被设计来跟NULL空指针相关联的。它们的区别就是,nil是一个对象,而NULL只是一个值。而且对于nil调用方法,不会产生崩溃或者抛出异常。

  框架(framework)就在多种不同的方式下使用这个技术。最主要的好处就是在调用方法之前根本无需检查这个对象是否是nil。如果调用了nil对象的一个有返回值的方法,那么会得到一个nil返回值。

  还有一点,经常在dealloc方法上设置某些对象为nil对象:

 -(void)dealloc{

self.caption = nil;

self.photographer = nil;

[super dealloc];

}

  之所以这么做是因为把nil对象设给了一个成员变量,setter就会retain这个nil对象,nil对象不会做任何事情,然后release旧的对象。会避免出现指向随机数据的情形。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Objective-C语法之nonatomic和atomic之间的区别发布时间:2022-07-12
下一篇:
刨根问底Objective-CRuntime发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap