zoukankan      html  css  js  c++  java
  • IOS 学习笔记 2015-03-20 O之 nil,Nil,NULL,NSNull

     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;
    }
  • 相关阅读:
    Java实现 LeetCode 661 图片平滑器(暴力)
    Java实现 LeetCode 661 图片平滑器(暴力)
    PHP imagecolorat
    PHP imagecolorallocatealpha
    PHP imagecolorallocate
    PHP imagecharup
    PHP imagechar
    网格 | CSS Grid (Grid Layout)
    网格 | @media.grid (Media Queries)
    缩放背景图像 | CSS Background and Borders: Scaling background images (Backgrounds & Borders)
  • 原文地址:https://www.cnblogs.com/ak23173969/p/4354318.html
Copyright © 2011-2022 走看看