一、野指针
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方

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

558

被折叠的 条评论
为什么被折叠?



