- /**
- 学习课程:内存管理相关内容:arc&mrc
- 1、内存管理的对象:对象。基本数据结构不需要内存管理,局部变量在一段代码段结束后会自动清空内存。而对象通过动态分配存储在堆中,即使指向它的指针已经消亡,它仍然存在,造成内存泄露。
- 2、在重写dealloc过程中,先释放当前对象的相关资源,最后通过[super dealloc]调用父类的函数去释放父类中相关的资源。遵循设计中自己只做自己的事的原则。
- */
- #import "Person.h"
- #import <Foundation/Foundation.h>
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
- // insert code here...
- //先生成一个Person类,并初始化
- Person *per = [[Person alloc]init];
- NSLog(@"per此时的引用计数为%ld",per.retainCount);
- //通过调用release方法让retainCount减一。调用完毕后系统检测到retainCount已经为0了,自动调用dealloc函数
- [per release];
- //此时per对象已经被回收了,(称为僵尸对象),若继续使用,会报野指针错误
- //[per setAge:15];
- //per=nil;//这句话将指针指向空,之后即使执行了类似[per setAge:15];的语句,也不会报错,从而让程序正常执行下去。
- //但是,如果在per release前误将per=nil。会导致内存泄露,因为此时已经丢失了该对象的地址,失去了操作权,即使调用release也没有效果了。
- // NSLog(@"Hello, World!");
- }
- return 0;
- }
复制代码- #import "Person.h"
- @implementation Person
- //重写继承的dealloc方法
- -(void)dealloc
- {
- NSLog(@"dealloc被调用,开始回收对象");
- //先释放子类的资源
- //再调用父类的dealloc释放父类的资源。遵循原则,自己处理自己的事情
- [super dealloc];
- }
- @end
复制代码
|