所以首先我们介绍一下什么是指针?
指针其实是一个内存地址,对于一个内存单元来说,单元的地址即为指针
空指针
:是一个指向空地址的指针,空指针是有效指针,值为nil、NULL、Nil或0等,给空指针发送消息不会报错,只是不响应消息而已,应该给野指针及时赋予零值变成有效的空指针,避免内存报错
野指针
:是指向“垃圾”内存(不可用内存)的指针,这样的指针是不安全的,使用可能产生段错误(段错误是指访问的内存超出了系统所给这个程序的内存空间)
产生原因:指针创建时未初始化。指针变量刚被创建时不会自动成为NULL指针,它会随机指向一个内存地址。
僵尸对象
:当xcode勾选zombie objects后 ,运行时系统会把所有已经回收的实例转化成特殊的“僵尸对象”,而不会真正回收他们。这种对象所在核心内存无法重用,因此不可能遭到覆写。僵尸对象收到消息后,会抛出异常,其中准确说明发送过来的消息,并描述了回收之前的那个对象。僵尸对象是调试内存管理的最佳方式
悬垂指针
:指针指向的内存已经被释放了 但是指针还存在 这就是一个 悬垂指针 或者说 迷途指针
一级指针
:一级指针就是指指针,里面放的就是元素的地址,我们可以通过访问元素的地址来找到该地址里存放的内容,即元素本身
二级指针
:指针变量也是变量,是变量就有地址,二级指针就可以存放指针变量的地址
一级指针和二级指针的区别:
一级指针直接访问内容
二级指针间接访问内容
一级指针的内存首地址
二级指针指向一级指针地址
在MRC下,二级指针类型定义为属性、成员变量或者参数都是可行的
在ARC下,二级指针类型则不能定义为属性或成员变量,但是可以作为参数传递
关于 多级指针
转发关于空指针应用:
nil
:指向一个对象的空指针,对objective c id 对象赋空值.
Nil
:在iOS中,Nil完全等同于nil
Null
: nil == Nil == Null 所以它们在object-c中是可以通用的
NULL
:指向其他类型(如:基本类型、C类型)的空指针, 用于对非对象指针赋空值.
NSNull
:在集合对象中,表示空值的对象.
nil
在Objective-C中用于id类型的对象
NSString *str = nil;
NSURL *url = nil;
id object = nil;
Nil
指向一个类的指针为空,在Objective-C中用于Class类型的对象
NULL
指向C类型的指针为空
用于对非对象指针赋空值简单举例:
int *intA = NULL;
char *charC = NULL;
struct structStr = NULL;
坏内存访问
:尝试访问一个不可用内存就是坏内存访问
网友评论