pragma mark ARC基本概念
pragma mark 概念
/**
MRC (Manual Reference Counting) : 手動(dòng)管理內(nèi)存
ARC (automatic Reference Counting) : 自動(dòng)引用計(jì)數(shù) (WWDC2011和iOS5引入的最大改革)
ARC的注意點(diǎn)和優(yōu)點(diǎn)
注意點(diǎn)
ARC 是編譯器特性(Xcode的一個(gè)功能),而不是運(yùn)行時(shí)特性
ARC 不是其他語(yǔ)言的垃圾回收, 有著本質(zhì)區(qū)別 (其他語(yǔ)言 是定時(shí)的去查看 有沒(méi)有垃圾回收)
ARC的優(yōu)點(diǎn)
完全消除了手動(dòng)管理內(nèi)存的煩瑣,讓程序員更加專注于app的業(yè)務(wù)
基本上能偶避免內(nèi)存泄露
有時(shí)還能更加快速,因?yàn)榫幾g器還可以執(zhí)行某些優(yōu)化
ARC的判斷原則
只要還有一個(gè)強(qiáng)指針變量 指向?qū)ο? 對(duì)象就會(huì)保持在內(nèi)存中
強(qiáng)指針 (__strong)
默認(rèn)所有的指針變量都是強(qiáng)指針
被__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函數(shù)
int main(int argc, const char * argv[])
{
/*
// Person *p = [[[Person alloc]init]autorelease];
#warning 默認(rèn)情況下所有的指針都是強(qiáng)指針
Person *p = [[Person alloc]init];
// [p retain];
// [p release];
*/
{
#warning ARC 的 判斷準(zhǔn)則
// ARC 的 判斷準(zhǔn)則 : 只要沒(méi)有強(qiáng)指針指向?qū)ο? 對(duì)象就會(huì)釋放
// 默認(rèn)情況下 所有的指針都是強(qiáng)指針
// Person *p = [[Person alloc]init];
// p = nil;
#warning 強(qiáng)指針和弱指針
/*
__strong Person *p = [[Person alloc]init];
// 弱指針
__weak Person *p2 = p ;
p = nil;
*/
#warning 在開(kāi)發(fā)中,千萬(wàn)不要使用一個(gè)弱指針保存一個(gè)剛剛創(chuàng)建的對(duì)象
// __weak Person *p = [[Person alloc]init];
#warning 單個(gè)對(duì)象的內(nèi)存管理
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
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者