Objective-C 内存管理


一、内存管理笔记


1、OC内存管理,管理堆栈内存,主要管理对象是堆内存。
2、内存计数:有指向它的,它的计数则加一。或者说有人引用它,计数加一。

3、没有人引用之后,内存计数为0.对象被销毁。内存被释放。
ARC 编译器自动加release 自动内存管理 对局部变量出括号,自动减1.
mrc 手动内存管理。
[a1 release] 释放一个,内存计数减一。

二、所有对象引用计数为0时,要释放内存的时候,都将调用:方法 dealloc。

上课以微信打飞机,为内存管理实例。讲解了当敌机被打死的时候,应该释放内存。检查所有对敌机对象有引用的位置,当所有地方都正确的释放,那么,Hero打死敌机,就会进入dealloc方法,此时可以在dealloc方法中输出一下,若做到了正确的内存管理,内存没有泄露,则将有“敌机死了”输出。

ARC的原则是:谁加,谁负责减。
内存计数加一的情况

1、alloc命令会导致内存计数加一。
则是:谁加,谁负责减。

2、
eg:
[[self.view addSubView:]]添加到界面 内存计数会增加 不确定个。
[[self.view addSubView:]] +1
[e removeFromSuperView]; -1
3、
加到数组
从数组减。
4、
timer 为确保针对对象的方法调用成功
也要对 对象进行引用。

三、属性括号中的关键字,用来控制Set、Get方法中得内容。

retain(strong) :让Set方法做两件事①把原来的值 release 即-1②把新传递进来的值 retain 即+1;
e.g.: self.enemy 为什么 self.enemy =[ [NSMutablearray alloc]init] ;需要加一
alloc +1
self.enemy Set方法+1

assign(weak) 让Set 方法做一件事
把传递进来的值 赋值给全局变量,和内存计数无关。基本数据类型用 assign。默认为assign。

对象类型,为什么要使用Strong。Strong关键字为什么要把原来的值减一
eg.:若两次赋值
出现的情况如图:对象类型Strong关键字作用

这里写图片描述

self.enemy =[ [nsmutablearray alloc]init];+2

self.enemy =[ [nsmutablearray alloc]init];

release(strong)
self.a = [[UIlable alloc]init];+2
自动内存管理会 -1.用到的同一个变量.如果是retain(strong),会再减一。
self.a = [[uilable alloc]init];

*例子:
一个人一次只能放一个风筝。
在放 新的风筝时 必须把老风筝收回来。再放新的。
如果不收回来。就放新风筝,那么老风筝就像一下放走让它走了,去污染环境了。*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值