首页 > 学院 > 开发设计 > 正文

IOS学习笔记2015-03-20O之nil,Nil,NULL,NSNull

2019-11-14 19:24:12
字体:
来源:转载
供稿:网友

 1.oc最好 用nil   [ nil  任意方法],不会崩溃
 nil 是一个对象值。
NULL是一个通用指针(泛型指针)。

2. NSNULL,NULL和nil在本质上应该是一样的,NULL和nil其实就是0,但是在Objective-c中,
   对于像NSArray这样的类型,nil或NULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,
   则可以用[NSNULL null返回的对对象来初始化NSArray中的内容,
3.因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。
  如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法:

+ (NSNull *) null;
因为Object-C的集合对象,如NSArray、NSDictionary、NSSet等,都有可能包含NSNull对象,所以,如果一下代码中的item为NSNull,则会引起程序崩溃。

 

////  main.m//  OC-特殊数据类型////  Created by wangtouwang on 15/3/20.//  Copyright (c) 2015年 wangtouwang. All rights reserved.//#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        // 首先介绍nil 代表对象空指针        Person  *p = [Person new];        NSLog(@"%@",p==nil?@"TRUE":@"FALSE");        Person *p2 ;        NSLog(@"%@",p2==nil?@"TRUE":@"FALSE");                Class pc = [Person class];        // 介绍 Nil 代表类是否存在        NSLog(@"%@",pc==Nil?@"TRUE":@"FALSE");        Class testClass ;        NSLog(@"%@",testClass==Nil?@"TRUE":@"FALSE");                //介绍 NULL NULL 是个值  对Objective-C值类型为空:int number = Null;(相当于 int number = 0;)  ( #define NULL ((void *)0)  )        int *money=NULL;        if (money == 0 )            NSLog(@"money is NULL");        else            NSLog(@"money is not NULL");                //介绍 NSNull 空对象 主要是适用于 数组  因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值        NSObject *obj1 = [[NSObject alloc] init];        NSObject *obj2 = [NSNull null];        NSObject *obj3 = [NSObject new];        NSObject *obj4;        NSArray *arr1 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];        NSLog(@"arr1 count: %ld", [arr1 count]);    //arr1 count: 3                NSObject *obj1;        NSObject *obj2 = [[NSObject alloc] init];        NSObject *obj3 = [NSNull null];        NSObject *obj4 = [NSObject new];        NSArray *arr2 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];        NSLog(@"arr2 count: %ld", [arr2 count]);   //arr2 count: 0                        //有异常!        NSObject *obj1 = [NSNull null];        NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];        for (NSString *str in arr1) {            NSLog(@"array object: %@", [str lowercaseString]);        }                //修改        NSObject *obj1 = [NSNull null];        NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];        for (NSString *str in arr1) {            if (![str isEqual:[NSNull null]]){                NSLog(@"array object: %@", [str lowercaseString]);            }        }            }    return 0;}

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表