objective c 中 NULL 和nil的区别

转自: 

http://hi.baidu.com/%B0%AE%C9%FA%BB%EE%B0%AEqt/blog/item/55dbddda74f2e72432fa1cd6.html/cmtid/e14ac7392cc199e514cecb3c

Null Values

These macros define null values for classes and instances.

#define nil __DARWIN_NULL
#define Nil __DARWIN_NULL
Constants
nil

Defines the id of a null instance.

Available in Mac OS X v10.0 and later.

Declared in MacTypes.h.

Nil

Defines the id of a null class.

Available in Mac OS X v10.0 through Mac OS X v10.4.

Declared in NSObjCRuntime.h.

 

Declared In
objc.h

 


在网上查找ruxia如下:


 

调用nil对象的方法(Calling Methods on Nil)

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

  这个技术被framework通过多种不同的方式使用。最主要的就是我们现在在调用方法之前根本无须去检查这个对象是否是nil。假如我们调了nil对象的一个有返回值的方法,那么我们会得到一个nil返回值。

  我们可以通过nil对象让我们的dealloc函数实现看上去更帅一点:

  - (void) dealloc

  {

  self.caption = nil;

  self.photographer = nil;

  [super dealloc];

  }

  之所以可以这么做是因为我们给把nil对象设给了一个成员变量,setter就会retain nil对象(当然了这个时候nil对象啥事情也不会做)然后release旧的对象。这个方式来释放对象其实更好,因为这样做的话,成员变量连指向随机数据的机会都没有,而通过别的方式,出现指向随机数据的情形机会不可避免。

  注意到我们调用的self.VAR这样的语法,这表示我们正在用setter,而且不会引起任何内存问题。假如我们直接去设值的话,就会有内存溢出:

  // incorrect. causes a memory leak.

  // use self.caption to go through setter

  caption = nil;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值