OC内存管理

1.内存管理 (isa 指针,superclass 指针,returnCount 初始值就为1 【引用计数器,记录对象什么时候需要销毁】)
1.创建类存分配弓箭,存储对象
2.初始化成员变量
3.返回对象的指针地址
//对象再完成创建的同时,内部会自动创建一个引用的计数器,
这个计数器,是系统用来判断是否回收对象的唯一依据,当我们的引用计数retainCount=0 的时候,系统会毫不犹豫回收对象
2.两个对象方法[对象 release] 销毁对象 retainCount-1
3.[对象 retain] 销毁对象 retainCount-1 返回self 指针
4.我们的引用计数器retainCount =0 的时候,对象就销毁了
5.dealloc 函数 当一个对象要被销毁了的时候,系统会自动调用dealloc函数,通知对象将要被销毁
//手动内存管理方法
1.野指针操作 (指向不存在的对象指针)
2.内存泄露
//内存管理原则 (配对原则)
只要出现new,alloc,retain 就一定配对出现一个 release,autorelease

在对象自身被销毁之前,一定要先调用[super dealloc] 释放父类中的相关对象

NSUIntager P=对象.retainCount;
1.指针操作
对象会默认调用
Person *p=[[Person alloc]init];
P=nil;
[p release]; //系统以及将p所指向的对象回收了
[p ]
避免野指针操作方法
//EXC _BAD_ACCESS 错误表示 访问了不可访问的对象
// 被系统回收的对象我们称之为僵尸对象
// 默认情况下,为了提高编码效率,不是实时监测僵尸对象
-(NSString *)
1.避免也指正操作的方法
1.如果您确定当作用域中的对象不会在被使用了,[p release] 不适用对象了,为了防止野指针操作,通常我们会把,不再使用的对象,执政变量,赋值为nil
2.内存泄露
–第一种情况
申诉
[p retain] retrinCount+1
[p release] retainCount -1 retainCount=0 才会被销毁,
出现了对象一直残留在作用域中,一直不销毁,就会出现内存泄露
–第二种情况
person *p=[[person alloc]init];
p=nil;
[p release];//[nil release] 等于将nil 进行释放
–第二种情况
Preson *p=[[Preson alloc]init];
p.age=20;
[p run];
Person *p1=p; //同时了指向了一个内存地址
[p1 release];//
p1.age=20; 野指针访问

-(void) dealloc
{
[super dealloc];
NSLog(@”对象呗销毁了”);
}

多个对象的内存管理
1.要保证拥有的对象再使用的地方也要存在,应该在使用后,后面无需再使用,才能进行[对象 release];
[对象 retain]//能够使得 retainCount +1 并且返回self对象

autorelease
内存配对:new ,alloc retain 方法就要配对 release autorelease
@autoreleasepool 自动释放池
//对象存入到自动释放池中,当池子被小销毁的时候,他会对池子中所有的对象
进行一次release 操作
//代表池子的作用域
@autoreleasepool {
//对象存入到自动释放池中,当池子被小销毁的时候,他会对池子中所有的对象
进行一次release 操作
[p autorelease]//加入第一次
[p autorelease]//加入第二次
} //代表池子将要被销毁,对池子所有的对象release
加入基础,就会销毁几次
release ratainCount-1
autorelease 只是将对象放入池子中,然后返回一个self

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值