Objecitive-C中的nil

移动开发 iOS
nil是一种类型,它只有一个值nil,它的主要功能是用于区别其他任何值,就像之前所说的,一个全局变量在第一次赋值前的默认值就是nil,将nil赋予一个全局变量等同于删除它,Lua将nil用于表示一种“无效值(non-value)”的情况,既没有任何有效值的情况。

当我学习OC的时候,我总是忍不住在对比。Actionscript是如何实现,而oc又是如何实现。这不,碰到nil的时候我发现了很大的不同之处。做个笔记。


在as中,如果将一个对象置为null,相当于空指针,那么后续对该对象的操作会报错。而在编码中,我们常常会判断if(obj == nul )来判断该对象是否存在,存在的话才可以进行后续操作。

而在oc中,nil就相当于c、c++中的NULL指针,一般释放对象后将对象置为nil非常重要,这样可以防止引用非法指针导致程序崩溃掉。

  1. [obj release];//此时obj的引用计数为0 
  2. [obj someMethod];//程序崩溃 
  3. [obj release]; 
  4. obj = nil; 
  5. [obj someMethod];//obj此时为nil,但不会崩溃 

在objective-c中我们只用nil来检查程序的逻辑,而不用于判断对象是否为空来避免崩溃。这与c++是不同。objective-c在运行时会自动处理向nil对象发送消息(调用方法),不会报错崩溃掉。

责任编辑:闫佳明 来源: oschina
相关推荐

2014-08-14 10:12:45

SwiftNil Coalesc

2015-03-13 09:36:09

NULLnullptr

2009-12-16 14:51:26

Ruby nil

2024-01-15 07:08:34

IsNil方法结构体

2022-06-13 07:03:25

Go 语言怎么优化重

2020-12-17 06:25:05

Gopanic 模式

2021-12-27 08:53:23

Go函数 Nil

2010-01-21 14:07:14

CC++声明

2010-01-27 16:05:06

C++堆栈

2011-07-20 10:06:54

CC++const

2010-01-21 09:34:57

C++语法

2011-04-11 11:09:50

this指针

2024-01-02 07:43:47

Go语言静态类型

2020-07-31 18:33:56

C++编程语言

2010-01-21 13:33:44

C++基类

2010-01-25 10:25:19

C++变量

2010-01-27 17:16:52

C++构造函数

2010-01-28 16:31:54

C++类型

2020-08-21 13:20:36

C++If ElseLinux

2010-01-20 10:19:55

C++数组
点赞
收藏

51CTO技术栈公众号