#import <Foundation/Foundation.h>
#import "GPDog.h"
#import "GPPerson.h"
int main(int argc,constchar * argv[]) {
@autoreleasepool {
{
GPPerson *person = [GPPersonperson];
}
{
GPDog *dog = [[GPDogalloc]init];
}
}
return0;
}
在ARC管理机制下 对上述代码 内存管理进行分析
#import <Foundation/Foundation.h>
#import "GPDog.h"
#import "GPPerson.h"
int main(int argc,constchar * argv[]) {
@autoreleasepool {
{
//创建一个 GPPerson的对象变量 person,变量放在栈区, person所指的内容为堆区的一片区域,并用便利构造器的方法进行初始化,默认将这片区域放到离它最近的自动释放池中
GPPerson *person = [GPPersonperson];
} //此处在栈区的person变量被释放,而person指向的堆内存没有被释放
{
//创建一个 GPDog的对象的变量 dog,变量也放在栈区,dog所指向的内容为堆区的一片区域,使用 alloc init的方式初始化这个变量
GPDog *dog = [[GPDogalloc]init];
}// 此处栈区的 dog变量被释放,而同时 dog变量所指向的堆区也被释放掉,调用GPDog的 dealloc方法
}//此处将释放池中的所有对象进行一次 relese操作,也就是释放 person对象所指向的堆内存空间,此时调用 GPPerson类的 dealloc方法
return0;
}