我的iOS学习历程 - OC第九天
今天主要讲的是内存的管理方法
1.IOS的内存管理中 Mac是使用的垃圾回收(gc) 有轮询延迟
手机用的是 引用计数
2.引用计数的方法:
( 1 ) alloc
alloc 开辟空间引用计数 从0 ->1
Person *p1 = [[Person alloc]initWithName:@"wanglong" age:18];
( 2 ) retain
retain 使用引用计数 +1
Person *p2 = [p1 retain];
( 3 ) retainCount
计数的数字
NSLog(@"%ld",[p3 retainCount]);
( 4 ) release
release 影响引用计数 -1,
当对象的引用计数为0 的时候,该对象就会被系统释放
[p1 release];
(5) autorelease
autorelease 在未来的某一时刻引用计数 会自动-1
autorelease 需要自动释放池去-1
autorelease 是要依托自动释放池去释放的
出了自动释放池 相当于系统会给释放池中间调用了autorelease对象发送一个 release消息
自动释放池:
@autoreleasepool {[p1 autorelease];// 相当于一个栈 出入池跟出入栈一个道理}for (int i = 0; i < 10; i++) {Person *p = [[Person alloc]initWithName:@"Curry" age:21];@autoreleasepool {// 释放池加在里面好 如果i< 很大的数就可能内存溢出[p autorelease];}}
注意:类方法,便利构造器方法 使用autorelease,其他方法需要再外部释放,是一个规范
( 6 ) copy
实现拷贝协议中的方法,需要满足NSCoping协议
copy方法对引用计数的影响要看你是怎么想法的,看你怎么实现copyWithZone方法
伪拷贝 拷贝完还是一个对象(直接返回)
- (id)copyWithZone:(NSZone *)zone{// 浅拷贝// 拷贝后 有两个对象 但是他们的值是同一个值 引用计数变化 被拷贝的对象不变 拷贝出来的新对象从0->1// 深拷贝 拷贝出新对象 并且 对象值也重新拷贝一份再赋值// 对字符串进行拷贝 拷贝的结果 要看字符串这个类如何实现的拷贝方法 对不可变字符串的拷贝 其实相当于 直接retain一次// 可变字符串 拷贝时 就是真拷贝了一个新的出来NSString *str = [_name copy]; Person *p = [[Person alloc ]initWithName:str age:_age];// 这叫做伪拷贝(直接返回)return p;}
( 7 ) dealloc
书写规范 一定要写在类的最上面,系统自动调用
如果重写的话:
-(void)dealloc
{// 如果要写东西都写在[super dealloc]上面,防止出现野指针情况// 如果重写dealloc方法 必须要调用父类的方法// 保证 对象可以被释放[super dealloc];
}
转载于:https://www.cnblogs.com/888yf/p/4992727.html
我的iOS学习历程 - OC第九天相关推荐
- 我的iOS学习历程 - OC第四天
今天主要说的是不可变字符串以及可变字符串的系统方法的调用和作用(配套练习题以及源代码下载页面) main函数 #import <Foundation/Foundation.h> int m ...
- 黑马程序员- IOS学习笔记-OC三大特性
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 封装 set方法 1.作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 ...
- iOS学习笔记---oc语言第三天
继承.初始化方法 一.继承 继承的上层:父类 继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量 ...
- 我的iOS学习历程 - UISlider(简单的设置一组图片动画)
今天我们学习的是UISlider,就是平时看视频听音乐等的进度条的设置 今天设置的slider是控制播放一组图片速度的例子: 1.初始化以及设置一些属性 // 初始化UISlider *slider ...
- 我的iOS学习历程 - UISegmentedControl
今天学习的是UISegmentedControl,相当于一个切换的分区栏,例如看小说会分最新,最热等,可以用此控件来进行切换 1.初始化(用数组进行初始化)并添加到视图上 // 数组中初始化必须是字符 ...
- iOS学习笔记---oc语言第八天
属性 能在一定程度上简化代码,并且增强实例变量的访问安全性 属性的声明:使用@property声明属性 eg:@property NSSstring *name;相当于@interface中声明了两 ...
- IOS学习之路--OC的基础知识
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...
- ios学习 准备列表
2019独角兽企业重金招聘Python工程师标准>>> Skip to content This repository Pull requests Issues Gist Watch ...
- iOS -- 学习资料总结(转载)
先著名转载地址:https://www.jianshu.com/p/c47c24ab1e76/ 关于iOS学习进阶的必读一些博客总结 经过一周的思考还是决定重组一下优秀的博客,首次整理这些博客比较乱, ...
最新文章
- Dart Hello World 示例程序【Dart专题1】
- wxWidgets:创建一个 Frame
- 信用差价Definition of 'Credit Spread'
- 【BZOJ】1004: [HNOI2008]Cards(置换群+polya+burnside)
- NET Core中使用Irony实现自己的查询语言语法解析器
- 一起开心集训队第一周训练赛2021/3/14
- mysql 读写分离
- [wp7游戏]wp7~~超级血腥类游戏~~集合贴~~
- Shell脚本基础语法
- 快速计算Distinct Count
- unity shader base pass and additional pass
- 绘制直方图,计算CPK、PPK等数据
- js验证身份证营业执照组织机构代码等
- 系统测试(学习笔记)
- Vue项目上传图片后在ie浏览器卡死
- 使用intel编译器编译WRF4.4
- IDR 关键帧 GOP
- 装了mysql电脑黑屏怎么办_电脑黑屏的原因,教你解决黑屏
- 教matlab唱周董的《七里香》
- ASP.NET Form Authentication - Membership Authentication
热门文章
- ACM-ICPC 2018 焦作赛区网络预赛 H题 String and Times(SAM)
- Linux之Ubuntu下安装屏幕录像软件(SimpleScreenRecorder)【摘抄】
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
- TinyFrame升级之五:全局缓存的设计及实现
- datagridview绑定与详细说明 (搜集)
- MongoDB学习笔记(一) MongoDB介绍及安装
- c语言中listempty函数,list_empty()和list_empty_careful()
- Android 集成微信分享2,实现微信分享
- Android GridView,recycleview,栅格布局
- Android 自定义带图标Toast,工具方法,Toast自定义显示时间