我的iOS学习历程 - OC第九天
2015-11-06 17:24
316 查看
今天主要讲的是内存的管理方法
1.IOS的内存管理中 Mac是使用的垃圾回收(gc) 有轮询延迟
手机用的是 引用计数
2.引用计数的方法:
( 1 ) alloc
alloc 开辟空间引用计数
从0 ->1
( 2 ) retain
retain 使用引用计数 +1
( 3 ) retainCount
计数的数字
( 4 ) release
release 影响引用计数 -1,
当对象的引用计数为0 的时候,该对象就会被系统释放
(5) autorelease
autorelease 在未来的某一时刻引用计数
会自动-1
autorelease 需要自动释放池去-1
autorelease 是要依托自动释放池去释放的
出了自动释放池 相当于系统会给释放池中间调用了autorelease对象发送一个
release消息
自动释放池:
( 6 ) copy
实现拷贝协议中的方法,需要满足NSCoping协议
copy方法对引用计数的影响要看你是怎么想法的,看你怎么实现copyWithZone方法
伪拷贝 拷贝完还是一个对象(直接返回)
( 7 ) dealloc
书写规范 一定要写在类的最上面,系统自动调用
如果重写的话:
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]; }
相关文章推荐
- 我的iOS学习历程 - OC第九天
- ios多线程死锁解析
- iOS开发路线简述
- 判断一个坐标点是否在一个无规则的多边形内 (iOS定位服务与地图应用开发:高德地图开发)
- 一个iOS图片选择器的DEMO
- 转载 iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
- iOS开发——创建你自己的Framework
- iOS成长之路-判断是不是电话号码的正则表达式
- iOS开发者必备:六大图片、图标处理类工具
- 一个关于AVPlayer蛋疼的释放问题(iOS 9.0 AVPlayer的使用与内存的释放问题)
- <iOS>NSScanner类的基本用法
- iOS开发总结之代码规范
- 8 次尝试,带你走进 iOS 精益编程
- iOS 9 新特性之实现 3D Touch 就是 So easy -- OC版
- iOS 9 学习系列:MapKit Transit
- IOS 音频,视频,照相,摄影
- iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)
- MJPhotoBrowser一些bug的处理
- Assigning to ‘ d<xxxxDelegate>' from incompatible type ‘xxViewController *const __strong'
- 2015年最新苹果开发者账号注册流程详解