pragma mark ARC基本概念
pragma mark 概念
/**
MRC (Manual Reference Counting) : 手动管理内存
ARC (automatic Reference Counting) : 自动引用计数 (WWDC2011和iOS5引入的最大改革)
ARC的注意点和优点
注意点
ARC 是编译器特性(Xcode的一个功能),而不是运行时特性
ARC 不是其他语言的垃圾回收, 有着本质区别 (其他语言 是定时的去查看 有没有垃圾回收)
ARC的优点
完全消除了手动管理内存的烦琐,让程序员更加专注于app的业务
基本上能偶避免内存泄露
有时还能更加快速,因为编译器还可以执行某些优化
ARC的判断原则
只要还有一个强指针变量 指向对象, 对象就会保持在内存中
强指针 (__strong)
默认所有的指针变量都是强指针
被__strong修饰的指针
Perosn *p1 = [[Perosn alloc]init];
__strong Person2 = [[Perosn alloc]init];
弱指针 (__weak)
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
/*
// Person *p = [[[Person alloc]init]autorelease];
#warning 默认情况下所有的指针都是强指针
Person *p = [[Person alloc]init];
// [p retain];
// [p release];
*/
{
#warning ARC 的 判断准则
// ARC 的 判断准则 : 只要没有强指针指向对象, 对象就会释放
// 默认情况下 所有的指针都是强指针
// Person *p = [[Person alloc]init];
// p = nil;
#warning 强指针和弱指针
/*
__strong Person *p = [[Person alloc]init];
// 弱指针
__weak Person *p2 = p ;
p = nil;
*/
#warning 在开发中,千万不要使用一个弱指针保存一个刚刚创建的对象
// __weak Person *p = [[Person alloc]init];
#warning 单个对象的内存管理
Person *p = [[Person alloc]init];
p = nil;
}
return 0;
}
Person.h //人类
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
Person.m
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"%s",__func__);
// [super dealloc];
}
@end
网友评论