【野指针与僵尸对象 Objective-C语言】

本文深入探讨Objective-C中的野指针和僵尸对象。野指针是指指向已被回收对象的指针,而僵尸对象是已被释放但其空间尚未分配给其他对象的情况。文章介绍了对象回收的本质,强调了访问僵尸对象可能导致的问题,并提供了如何开启僵尸对象实时检查机制的步骤,以避免编程错误。最后,建议在释放对象后将指针置为nil来防止僵尸对象错误的发生。

一、野指针

1)C语言中的野指针:定义1个指针变量,没有初始化,这个指针变量的值,是一个垃圾值,指向1块儿随机的空间,这个指针,就叫做野指针。
2)OC当中的野指针:指针指向的对象,已经被回收了。这样的指针,就叫做野指针。
例如,有一个Person类:
Person .h文件:
@interface Person : NSObject
– (void)sayHi;
@end

Person.m文件:
@implementation Person
– (void)dealloc
{
NSLog(@“人挂了。。。”);
[super dealloc];
}
– (void)sayHi
{
NSLog(@“大家好。。。”);
}
@end

main.m文件:
#import <Foundation/Foundation.h>
#import “Person.h”
int main()
{
Person *p1 = [Person new];
[p1 release];
}

执行[p1 release];这句话之后,p1指针指向的对象就被回收掉了,这是p1指针就是一个野指针。

二、对象回收的本质

1)什么叫做对象的回收:
内存回收的本质:申请1个变量,实际上就是向系统申请指定字节数的空间,这些空间,系统就不会再分配给别人了,
当变量被回收的时候,代表变量占用的字节空间从此以后,系统可以分配给别人使用了,
但是字节空间中存储的数据还在。
回收对象:
所谓的对象的回收,指的是对象占用的空间可以分配给别人了,
当这个对象占用的空间没有分配给别人之前,其实对象数据还在。
例如,在刚才的代码最后,再来1句:
[p1 sayHi];
是不会有问题的。
但是,如果调用多个sayHi方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值