内存管理与ARC、MRC

-fobjc-arc:如果项目是非ARC模式,则需要为ARC模式的代码文件添加-fobjc-arc

-fno-objc-arc:如果项目是ARC模式,则需为非ARC模式的代码文件添加-fno-objc-arc


ARC(Automatic Reference Counting):内存自动回收

- (void)dealloc
{
    NSLog(@"person dealloc");
    //在ARC中,不能调用[super dealloc];可以重写dealloc
    //[super dealloc];
}
与内存管理相关的方法都不能调用(retain,retainCount,release)

判断对象是否被释放:当对象没有强指针引用的话就会被释放

强指针:创建的对象默认就是强指针 __strong

弱指针:__weak

当两个对象的两个指针相互引用时,会出现内存无法释放的问题,这时需要将两个对象的属性,一端用strong,一端用weak或assign

例:

#import <Foundation/Foundation.h>
#import "Person.h"
@interface Card : NSObject
@property(nonatomic,weak)Person *person;//一个类里用strong,另一个用assign或weak
@end

#import <Foundation/Foundation.h>
@class Card;
@interface Person : NSObject
//@property(nonatomic,strong)NSString *name;
@property(nonatomic,strong)Card *card;
@end

非ARC(MRC:Mannul Reference Counting):手动管理内存

retain:当变量为指针类型的时候,需要retain修饰,使用setter方法(赋值)的时候,引用计数加1

assign:修饰非指针变量和id类型变量,如NSInteger,CGFloat或delegate

当两个对象的两个指针相互引用时,会出现内存无法释放的问题,这时需要将两个对象的属性,一端用strong,一端用assign

与内存管理有关的方法

1)alloc:引用计数器自动设为1

2)retain:引用计数器+1,返回经过+1后的当前实例对象

3)release:引用计数器-1,并不一定是释放

4)retainCount:获取引用计数器的值

5)dealloc:当实例对象被销毁之前,系统自动调用。注:一定要调用[super dealloc]!!!


与内存管理相关的名词:

1)僵尸对象:此对象被销毁,不能再使用,不能给它发送任何消息

2)野指针:指向僵尸对象(不可用的内存)的指针,给野指针发送消息将会发生不可控的后果。

3)空指针:没有指向任何对象的指针,给空指针发送消息不会产生任何行为


内存管理原则:

1.如果想持有某个对象,就必须负责让做一次retain操作,引用计数器+1

2.如果想放弃某个对象的持有权,就必须让其做一次release操作,引用计数器-1

3.谁retain,谁release





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值