网站首页 > 技术文章 正文
记录一个菜鸟的IOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如路过的大神如指教几句,亦枫感激涕淋!
细心的朋友可能已经注意到了,IOS学习之旅系列教程在本篇公众号的文章中,封面已经换成美女图片了,程序员的福利有木有!!!
这是亦枫将在微信公众号 [技术鸟] 的IOS系列文章中采取的路线。看文章,学技术,眼睛累了马上点击大图看美女,这难道就是传说中的养眼吗!
相比于Java等其他编程语言,在空指针、空值上,iOS开发中所用到Object-C语言的使用较为复杂,有nil、Nil、NULL和NSNull多种情景可供使用,初学者很容易在它们之间产生混淆。
定义区别
- nil
指向OC中对象的空指针; - Nil
指向OC中类的空指针; - NULL
指向变量类型的空指针; - NSNull
在集合对象中,表示空值的对象;使用小结
- 从字面意义上理解,nil是一个对象,而NULL是一个值,所以在调用对象方法时:
[nil 任意方法]
返回NO,不会出现问题,这与Java等语言中经典的NullPointerException空值异常大相径庭;[NSNull 任意方法]
抛出异常甚至导致崩溃。常见用法:NSURL *url = nil; Class class = Nil; int *pointerInt = NULL;
- NSNULL,NULL和nil在本质上应该是一样的,NULL和nil其实就是0,但是在Objective-c中,对于像NSArray这样的类型,nil或NULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用[NSNULL null返回的对对象来初始化NSArray中的内容。因为在集合对象如NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类,能起到占位符的作用。NSNull只有一个方法:
+ (NSNull *) null;
常见案例
- 下面一段代码是常见的错误,release对象没有设置为nil,从而引起程序崩溃:
id someObject=[[Object alloc] init]; //... [someObject release]; //... if(someObject){ //crash here }
- 常见判空处理:
最后通过集合对象中占位符来加深一下理解://判断对象不空 if(object) {} //判断对象为空 if(object == nil) {} //数组初始化,空值结束 NSArray *pageNames=[[NSArray alloc] initWithObjects:@"DocumentList",@"AdvancedSearch",@"Statistics",nil]; //判断数组元素是否为空 UIViewController *controller=[NSArray objectAtIndex:i]; if((NSNull *)controller == [NSNull null]){ // } //判断字典对象的元素是否为空 NSString *userId=[NSDictionary objectForKey:@"UserId"]; if(userId == [NSNull null]){ // }
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]); //count: 3 因为obj=nil,在加入obj4时就结束添加对象 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]); //count: 0,因为obj1=nil,所以后面的对象没有添加进去 [NSNull null]通常作为占位符作用,如下: NSObject *obj1 = [NSNull null]; NSArray *arr1 = [NSArray arrayWithObjects:@ "One" , @ "TWO" , obj1,@ "three" ,nil]; **for ** (NSString *str in arr1) { NSLog(@ "array object: %@" , str); } //result:One、Two、、three NSObject *obj1 = [NSNull null]; NSArray *arr1 = [NSArray arrayWithObjects:@ "One" , @ "TWO" , obj1,@ "three" ,nil]; **for ** (NSString *str in arr1) { **if ** (str != [NSNull null]){ NSLog(@ "array object: %@" , str); } } //result:One、Two、three
猜你喜欢
- 2024-12-17 C语言实现推箱子游戏!(超简单详细)代码思路+源码分享
- 2024-12-17 学习笔记之C#基础——数组和集合 c#中数组用法
- 2024-12-17 新函数REDUCE来了!Excel中的最强辅助,太强大了
- 2024-12-17 一篇文章学会golang语法,golang简明教程快速入门
- 2024-12-17 深入理解 Golang 中的值类型和引用类型
- 2024-12-17 SpringBoot系列之数据库初始化-datasource配置方式
- 2024-12-17 C++ 创建数组和使用数组学习笔记 c++如何建立数组
- 2024-12-17 Java Map 中那些巧妙的设计 javamap的用法
- 2024-12-17 大数据开发基础之一维数组的定义、初始化及与二维数组的区别
- 2024-12-17 go语言结构体与初始化 go 结构体初始化
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)