------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
/*
1.引用计数器
用来保存当前对象有几种东西在使用它(数字)
2.引用计数器的作用
用来判断当前对象是否应该回收内存空间(如果对象不等于nil,当引用计数器为0,此时要回收当前对象的内存空间)
3.引用计数器的操作
retain 使得引用计数器+1
release 使得引用计数器-1
retainCount 得到引用计数器的值
4.如果一个对象释放的时候,会有“临终遗言”(会调用该对象的dealloc方法)
注意:
1)dealloc方法是NSObject,一般我们会重写dealloc方法
2)在dealloc方法的内容,我们要调用[super dealloc]
5.手动内存管理
MRC 是手动内存管理
ARC 是自动内存管理
注意,我们创建一个项目,此时默认是ARC的(自动内存管理)把项目从ARC的模式改成MRC模式
*/
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc,const char * argv[]) {
@autoreleasepool {
// 创建一个Person的实例对象
Person *p = [[Personalloc]init]; //对象有没有所有者?有
//证明有一个所有者
NSUInteger count = [p retainCount];
NSLog(@"count = %lu",count); // %lu指无符号
//使用所有者+1
Person *p2 = [p retain];
NSLog(@"p2 = %lu",[p2retainCount]);
//如果想要对象回收,想办法使 retainCount= 0
[p release]; // 1
[p release]; // 此处执行后p的空间会被回收
NSLog(@"p = %lu",[pretainCount]);
// 证明p空间被回收,可以在Person类中,重写dealloc方法
}
return 0;
}
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
Person.m
//
// Person.m
// OC7-MRC内存管理
//
// Created by 陈家劲 on 15/11/9.
// Copyright © 2015年陈家劲. All rights reserved.
//
#import "Person.h"
@implementation Person
//dealloc方法是对象的临终遗言方法
//对象被回收或者被销毁时,会默认启动该方法
//注意 dealloc方法是系统自动调用的 引用计数器的值自动调用的 不需要手动调用
- (void)dealloc
{
// 1)先释放子类自己的内存空间
NSLog(@"Person已经挂掉了");
// 2)在释放父类
[super dealloc];
}
@end