Objecitive-C中的nil

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

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

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

1 [obj release];//此时obj的引用计数为0
2 [obj someMethod];//程序崩溃
3  
4 [obj release];
5 obj = nil;
6 [obj someMethod];//obj此时为nil,但不会崩溃
在objective-c中我们只用nil来检查程序的逻辑,而不用于判断对象是否为空来避免崩溃。这与c++是不同。objective-c在运行时会自动处理向nil对象发送消息(调用方法),不会报错崩溃掉。
目录
相关文章
|
8月前
|
存储 JavaScript 前端开发
深入理解 JavaScript 执行上下文与 this 绑定机制
JavaScript 代码执行时,会为每段可执行代码创建对应的执行上下文,其中包含三个重要属性:变量对象、作用域链、和 this。本文深入剖析了执行上下文的生命周期以及 this 在不同情况下的指向规则。通过解析全局上下文和函数上下文中的 this,我们详细讲解了 this 的运行期绑定特性,并展示了如何通过调用方式影响 this 的绑定对象。同时,文中对箭头函数 this 的特殊性以及四条判断 this 绑定的规则进行了总结,帮助开发者更清晰地理解 JavaScript 中的 this 行为。
182 8
深入理解 JavaScript 执行上下文与 this 绑定机制
|
缓存 JavaScript
【Node】node.js安装与配置(详细步骤)
【Node】node.js安装与配置(详细步骤)
3641 2
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的学校运动会信息管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的学校运动会信息管理系统附带文章和源代码部署视频讲解等
78 2
|
XML Java 应用服务中间件
Servlet 教程 之 Servlet 异常处理 6
该教程介绍了Servlet异常处理的示例,创建了一个名为`ErrorHandler`的Servlet,它捕获并显示错误和异常信息。当错误或异常发生时,通过web.xml配置错误页面映射到这个Servlet。当访问不存在的Servlet或触发异常时,`ErrorHandler`会显示错误代码、异常类型、Servlet名称和请求URI等详细信息。用户需将类编译后放入Tomcat的classes目录,并在web.xml中配置错误处理映射。
94 0
|
Web App开发 弹性计算 应用服务中间件
通过workbench远程登录ECS,快速搭建Docker环境
通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
799 0
通过workbench远程登录ECS,快速搭建Docker环境
|
Python
Python小游戏(打地鼠)
Python小游戏(打地鼠)
260 0
Python小游戏(打地鼠)
8.1.3 相机取景器
8.1.3 相机取景器
138 0
8.1.3 相机取景器
|
SEO
挖掘关键词同义的近义词提高排名
为什么要使用和关键词相关的同义词 SEO喜欢关键词。这些是人们搜索的词。使您的帖子和页面排名的词。您花了很多精力找到完美的关键词来优化您的文章。那么,为什么不能一遍又一遍地使用那个确切的关​​键词呢?为什么要使用和关键词相关的同义词?这样做有助于提高你的排名吗?嗯,是!事实上:使用和关键词相关的同义词,正确的方式肯定会帮助你排名。
1005 0
Object C学习笔记1-基本数据类型说明
  Objective-C数据类型可以分为:基本数据类型、对象类型和id类型。基本数据类型有:int、float、double和char类型。对象类型就是类或协议所声明的指针类型,例如:NSAutoreleasePool * pool,其中NSAutoreleasePool是一个类,NSAutoreleasePool *是它指针类型。
822 0
Object C学习笔记5-ARC forbids explicit message* 编译错误
  在学习Object C的过程中XCode 编译器经常出现 "ARC forbids explicit message send of release" 的错误提示。   以上问题主要出现在release,retain 等操作的时候,这是因为你在新建工程的时候使用ARC功能.
834 0