zoukankan      html  css  js  c++  java
  • Objective C 中Nil 和nil

    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旧的对象。会避免出现指向随机数据的情形。

  • 相关阅读:
    洛谷P1033 自由落体 题解
    尴尬
    UVA11988 【Broken Keyboard (a.k.a. Beiju Text)】:题解
    UVA101 The Blocks Problem 题解
    TCP的粘包和拆包问题及解决办法(C#)
    MIPS学习笔记(一)
    MySQL基础(一)
    博客园的标签怎么变了两下???
    nextInt()和nextLine()连用报错
    C++代码雨
  • 原文地址:https://www.cnblogs.com/tanglimei/p/3016616.html
Copyright © 2011-2022 走看看