iOS开发nil、Nil、NULL、NSNull的区别

释放双眼,带上耳机,听听看~!

nil、Nil、NULL、NSNull的区别

  • nil:指向一个对象的空指针,对objective c id 对象赋空值.
  • Nil:指向一个类的空指针,表示对类进行赋空值.
  • NULL:指向其他类型(如:基本类型、C类型)的空指针, 用于对非对象指针赋空值.
  • NSNull:在集合对象中,表示空值的对象.

  • 1.nil 在指向一个对象的指针为空 定义如下:
#ifndef nil
# if __has_feature(cxx_nullptr)
#   define nil nullptr
# else
#   define nil __DARWIN_NULL
# endif
#endif

在Objective-C中用于id类型的对象

NSString *str = nil;
NSURL    *url  = nil;
id object      = nil;
  • 2.Nil 指向一个类的指针为空 定义如下:
#ifndef Nil
# if __has_feature(cxx_nullptr)
#   define Nil nullptr
# else
#   define Nil __DARWIN_NULL
# endif
#endif

在Objective-C中用于Class类型的对象

Class Class1 = Nil;
Clsss Class2 = [NSURL class];
  • 3.NULL 指向C类型的指针为空 在stddef.h中定义如下:
#if defined(__need_NULL)
#undef NULL
#ifdef __cplusplus
#  if !defined(__MINGW32__) && !defined(_MSC_VER)
#    define NULL __null
#  else
#    define NULL 0
#  endif
#else
#  define NULL ((void*)0)
#endif

用于对非对象指针赋空值简单举例

int   *intA    = NULL;
char *charC     = NULL;
struct structStr = NULL;
  • 4.NSNull在Objective-C中是一个类.
    • NSNull有 + (NSNull *)null; 单例方法.
    • 多用于集合(NSArray,NSDictionary)中值为空的对象.
NSArray *array = [NSArray arrayWithObjects:
[[NSObject alloc] init],
[NSNull null],
@"aaa",
nil,
[[NSObject alloc] init],
[[NSObject alloc] init], nil];
NSLog(@"%ld", array.count); // 输出 3,NSArray以nil结尾
//
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
@"Object0", @"Key0",
@"Object1", @"Key1",
nil,        @"Key-nil"
@"Object2", @"Key2",
nil];
NSLog(@"%@", dictionary); // 输出2个key-value,NSDictionary也是以nil结尾
//
NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
[mutableDictionary setObject:nil forKey:@"Key-nil"]; // 会引起Crash
[mutableDictionary setObject:[NSNull null] forKey:@"Key-nil"]; // 不会引起Crash
//所以在使用时,如下方法是比较安全的
[mutableDictionary setObject:(nil == value ? [NSNull null] : value)
forKey:@"Key"];

 

 

人已赞赏
iOS文章

iOS开发NSString 字符串处理:截取字符串、匹配字符串、分隔字符串

2020-5-13 4:46:49

iOS文章

iOS 真机测试错误解决"An App ID with Identifier ...is not available"

2020-5-13 6:01:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索