OC基础--OC内存管理原则和简单实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了OC基础--OC内存管理原则和简单实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2121字,纯文字阅读大概需要4分钟。
内容图文
ARC:
由于自己的学习视频太早,Xcode是iOS6版本,新建命令行项目后,系统会默认启动ARC机制,全程Automatic Reference Counting,简单的说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。--所以自己在学习内存管理的时候为对象进行retain或者release的时候编译器总会报错。
必须注意的是:ARC并不是GC(垃圾回收机制),它只是一种代码静态分析(Static Analyzer)工具。
解决办法:由于版本不一样,解决办法的操作方式也不一样。踏破铁鞋无觅处,终于找到了适合自己的
按照步骤来,第一步点击项目名称, 第二步点击buid settings,第三步再输入框输入Automatic Reference Counting,在下面会搜索出来第四步,所示,将yes改为no。
第二步,如果你点的不是buid settings,那么你就搜索不出来任何设置项。
复制的时候注意,如果实在不行,可以复制中间的 Reference,搜索出来好几个设置项,然后选择第四步所示。
一、内存管理原则:
1.只要你调用了alloc、new创建了一个新对象,那么你就有责任做一次release
2.只要你调用了retain,那么你也有责任做一次release
3.不能再操作已经被释放的对象,不然会发生野指针错误
4.在对象被释放之前,才能操作对象
5.计数器有加就应该有减
二、开启Xcode野指针调试功能:
1.点击左上角Stop按钮右边的项目名称
2.Edit Scheme
3.Diagnostics
4.勾选Objective-C的Enable Zoombie Objects
三、成员变量的内存管理(如果成员变量是对象,才需要管理):
注意两点:
1.set方法的管理
* release旧的成员变量,retain新的成员变量
2.delloc方法的管理
* release成员变量
四、代码实例:
Person.h文件:
1 // 2 // Person.h 3 // 15-内存管理03-对象之间的内存管理 4 // 5 6 #import <Foundation/Foundation.h> 7#import"Dog.h" 8#import"Card.h" 910@interface Person : NSObject 11{ 12 Dog *_dog; 13 Card *_card; 14int _age; 15} 1617 - (void) setDog:(Dog *)dog; 18 - (Dog *) dog; 1920 - (void) setCard:(Card *)card; 21 - (Card *) card; 2223 - (void) setAge:(int)age; 24 - (int) age; 2526@end
Person.m文件:
1 // 2 // Person.m 3 // 15-内存管理03-对象之间的内存管理 4 // 5 6 #import " Person.h " 7 8 @implementation Person 9 10 // _age 成员变量不是对象,所以不用管理 11 - (int)age 12{ 13return _age; 14} 1516 - (void)setAge:(int)age 17{ 18 _age = age; 19} 2021//set方法的管理 22//release旧的成员变量,retain新的成员变量23 - (void)setCard:(Card *)card 24{ 25if (card != _card)//判断是否为旧的成员变量26 { 27 [_card release]; 28 _card = [card retain]; 29 } 30} 3132 - (Card *)card 33{ 34return _card; 35} 3637 - (void)setDog:(Dog *)dog 38{ 39if (dog != _dog) 40 { 41 [_dog release]; 42 _dog = [dog retain]; 43 } 44} 4546 - (Dog *)dog 47{ 48return _dog; 49} 5051 - (void)dealloc 52{ 53//Person在拥有card对象时,在set方法retain,所以在Person对象释放之前,将由Person的dealloc方法来释放card对象 54//"谁污染,谁治理"55 [_card release]; 56 [_dog release]; 57 NSLog(@"Person被销毁了"); 58 [super dealloc]; 59} 60@end
原文:http://www.cnblogs.com/gchlcc/p/5197447.html
内容总结
以上是互联网集市为您收集整理的OC基础--OC内存管理原则和简单实例全部内容,希望文章能够帮你解决OC基础--OC内存管理原则和简单实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。