The difference between nil, nil, null and nsnull in OBJECTIVE-C

Source: Internet
Author: User
Tags define null



Nil: A null pointer to an Objective-c object.
(#define NIL ((ID) 0))



Nil represents a Objective-c object with a pointer to an empty





Nil: A null pointer to an OBJECTIVE-C class.



The first capital of nil and nil is a bit different, nil defines a pointer to an empty class, which is class, not an object.



#define NIL 0










null: A null pointer to anything else, was for c-style memory pointers.
(#define NULL ((void *) 0))




NSNull: A class defines a singleton object used to represent null values in collection objects (which don ' t allow Nil values).
[NSNull NULL]: The singleton instance of NSNull.






Technically they ' re all the same,,, but in practice they give someone reading your code some hints about what ' s going on; Just like naming classes with a capital letter and instances with lowercase are recommended, but not required.

If someone sees you passing NULL, they know the receiver expects a C pointer. If They see nil, they know the receiver was expecting an object. If They see Nil, they know the receiver is expecting a class. Readability.






If obj is nil, [obj message] would return NO, without nsexception
If obj is NSNull, [obj message would throw a nsexception





Demo1:


   [NSApp beginSheet:sheet
              modalForWindow:mainWindow?
              modalDelegate:nil       //pointing to an object 
              didEndSelector:NULL     //pointing to a non object/class 
              contextInfo:NULL];      //pointing to a non object/class



Demo2:


    NSObject *obj1;
        if (obj1 != nil) {
            NSLog(@"object is not nil");
        }else
        {
            NSLog(@"object is nil");
        }
        
        testClass *c1;
        if (c1 != Nil) {
            NSLog(@"class is not Nil");
        }else
        {
            NSLog(@"class is Nil");
        }
        
        int *money;
        if (money != NULL) {
            NSLog(@"money is not NULL");
        }else
        {
            NSLog(@"money is NULL");
        }



DEMO3:


    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



Demo4:


//There is an exception!
         NSObject *obj1 = [NSNull null];
         NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];
         For (NSString *str in arr1) {
             NSLog(@"array object: %@", [str lowercaseString]);
         }

         //modify
         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]);
             }
         } 





The difference between nil, nil, null and nsnull in OBJECTIVE-C


Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.