`

【Objective-C】浅谈关于nil和 null区别及相关问题

 
阅读更多

 

1、nil和null从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的,个人感觉有点像属性当中,基本类型分配为assign NSString类型一般分配copy,而对象一般用retain。而且我们对于nil调用方法,不会产生crash或者抛出异常。 
看一段 

nil -> Null-pointer to objective- c object 
NIL -> Null-pointer to objective- c class 
null-> null pointer to primitive type or absence of data. 

看一下用法 

Java代码  收藏代码
  1. NSURL *url = nil;  
  2. Class  class = Nil;  
  3. int *pointerInt = NULL;  

nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。这些可以理解为nil,Nil, NULL的区别吧。 
2、一个可以研究一下的问题 
在dealloc中 
Java代码  收藏代码
  1. -(void) dealloc  
  2. {  
  3. self.test = nil;   
  4. [_test release];  
  5. test = nil;  
  6. }  

这几个的区别 
先说最简单的  [_test release]; 这个就是将引用技术减1,所谓的引用计数就是看看有多个指针指向一块内存实体,当release一次,就是指针减少一个,release到了0的时候,就是真正把这块内存归还给系统的时候了 

再说self.test = nil;说明一下 属性和setter和getter方法就不难理解了 
Java代码  收藏代码
  1. -(void) setTest:(NSString *)newString  
  2. {  
  3. if(_test != newString)  
  4. [_test release];  
  5. _test = [newString retain];  
  6. }  
  7. -(NSString *)test  
  8. {  
  9. return  _test;  
  10. }  

这个是setter和getter方法,而在这个问题中相当于刚才的代码改变为 
Java代码  收藏代码
  1. if(_test != nil)  
  2. [_test release];  
  3. _test = nil;  

现在就比较容易解释了,setter方法会retain nil对象,在这之前已经先release了旧的对象,这个方法优点是成员变量连指向随机数据的机会都没有,而通过别的方式,就可能会出现指向随机数据的情况。当release了之后,万一有别的方法要用要存取它,如果它已经dealloc了,可能就会crash,而指向nil之后,就不会发生错误了。nil说白了就是计数器为0,这么说吧,当真正release一个对象的时候,NSLog是打印不了它指向的内存控件的,而当nil的时候,是可以打印出来指向的一个内存空间。 
那么现在也不难解释test = nil;  单纯的这种用法可以说是自己给自己制造内存泄露,这里可以这么理解,就是相当于将指向对象的指针直接和对象一刀两断了。直接让test指向nil,而内存实体不会消失,也不会有系统回收。
分享到:
评论

相关推荐

    objective-c编程 第2版=objective-c program 2nd edition_13889311

    此外,还会涉及Objective-C中的特殊语法,如nil和NULL的区别、实例变量和属性的使用。 2. **类与对象**:Objective-C的核心是类和对象。书中会详细解释如何定义类,创建对象,以及如何通过方法(selector)来实现...

    Programming With Objective-C

    根据给出的内容,我们可以总结出以下关于Objective-C编程语言的知识点,这些知识点将覆盖从Objective-C的基础知识到高级特性,以及如何在iOS移动开发中使用Objective-C: 1. Objective-C简介 Objective-C是一种面向...

    Object-C语言教程-提供了 Objective-C 的基本语法和一些示例,希望能够帮助你快速入门 Objective-C

    **Objective-C**是一种结合了C语言的基础特性和Smalltalk式消息传递机制的面向对象编程语言。作为C语言的一个超集,Objective-C允许开发者直接使用C语言代码。此外,它还借鉴了C++的一些特性,尽管它并非C++的直接...

    Objective-C培训教程

    Objective-C中的nil相当于C中的NULL,用于表示空指针。YES和NO是Objective-C特有的布尔值表示方法,分别代表逻辑真和假,其值分别为1和0,分别被定义为宏YES和NO。BOOL类型在Objective-C中具有特殊用途,与C++中的...

    Objective-C2.0程序设计习题官方答案

    Objective-C2.0是苹果公司开发的一种面向对象的编程语言,它是C语言的超集,融合了Smalltalk的动态特性,广泛应用于iOS和Mac OS X操作系统。本资料集中的"Objective-C2.0程序设计习题官方答案"显然是针对学习...

    Object-C语言教程:Objective-C 简介

    ### Objective-C语言简介 #### 一、Objective-C概述 Objective-C是一种主要应用于苹果操作系统上的编程语言,它是C语言的一种扩展,支持面向对象编程特性。Objective-C最初由Pike International公司的Brad Cox和...

    禅与Objective-C

    关于`nil`和`BOOL`类型的检查,书中也给出了相应的建议: - 在进行`nil`检查时,通常使用`if (variable)`或`if (!variable)`的形式,因为`nil`等同于`NULL`,会被解释为`FALSE`。 - 对于`BOOL`类型的检查,则直接...

    From C++ to Objective-C

    在Objective-C中,还包含了一些特殊的值,如nil、Nil、YES和NO,这些与C++中的NULL或布尔值true和false不完全相同,需要特别注意。Objective-C同样支持C++中的注释风格(// 和 /*...*/),但其变量声明位置较为灵活...

    objective-c语言教程

    ### Objective-C语言教程知识点概述 #### 一、Objective-C编程语言简介 - **目标读者**:本书适合希望深入了解Objective-C编程语言的开发者阅读。 - **文档结构**:本书分为多个章节,涵盖Objective-C的核心概念和...

    禅与Objective-C编程艺术

    《禅与Objective-C编程艺术》是一本专注于iOS开发领域中Objective-C编程语言的书籍。Objective-C是苹果公司开发的一款编程语言,主要用于开发macOS、iOS和watchOS应用。本书以其独特的视角,将编程艺术与禅的哲学...

    《深入浅出发Objective-C》 内存管理.pdf

    Objective-C的内存管理是一种重要的编程技能,它对于创建出色的应用程序至关重要。在深入探讨Objective-C内存管理之前,让我们以日常生活中的比喻来形象说明内存管理的过程:当我们在家中自己做饭时,需要亲自处理...

    Objective-C语言教程、案例与项目资源详解.docx

    ### Objective-C语言教程、案例与项目资源详解 #### 一、Objective-C基础知识 **1.1 类与对象** Objective-C的核心概念是类和对象。类是对象的模板或蓝图,它定义了对象应该具备哪些属性(如变量)和行为(如方法...

    Objective-C Succinctly.pdf

    - **nil和NULL**:分别表示Objective-C和C语言中的空值。 - **Foundation框架数据结构**: - **NSNumber**:用于包装原始数据类型。 - **NSDecimalNumber**:用于处理十进制数值。 - **NSString**:用于表示不可...

    Learn_Objective-C(zh)(v2)

    《Learn_Objective-C(zh)(v2)》是面向初学者的一份中文教程,旨在帮助读者掌握Objective-C这门编程语言,从而踏入iPhone应用开发的大门。Objective-C是由Apple公司开发的一种面向对象的编程语言,它是开发iOS和macOS...

    Objective-C - NSURLSession实现短信验证码注册登录完整示例:Objective-C - NSURLSession.m和附件说明

    在iOS开发中,Objective-C是主要的编程语言之一,用于构建原生的移动应用程序。`NSURLSession`是苹果提供的一个强大的网络编程接口,用于处理HTTP和其他网络协议的数据传输。本示例将详细介绍如何使用Objective-C和...

    Objective-C switch 语句

    Objective-C 是苹果公司开发的一种面向对象的编程语言,它基于C语言并添加了类、协议、消息传递等特性。在Objective-C中,`switch`语句是一种条件控制结构,用于根据不同的情况执行不同的代码块。它与C语言中的`...

    Objective-C培训资料.pdf

    在Objective-C中,nil用于表示空指针,相当于C语言中的NULL。YES和NO是布尔常量,分别代表true和false,但Objective-C中的BOOL类型与C++不同,它将1定义为YES,0定义为NO。 数据类型 Objective-C的数据类型分为基本...

    Objective-C基础教程(入门教程) 重新排版

    例如,Objective-C使用nil代替C语言中的NULL,用于指代空指针。在Objective-C中,BOOL类型也被用于表示布尔值,其取值为YES或NO,这是由于Foundation类库提供的BOOL定义。 在编译和环境设定方面,教程指出不同操作...

Global site tag (gtag.js) - Google Analytics