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文件:

 //
// Person.h
// 15-内存管理03-对象之间的内存管理
// #import <Foundation/Foundation.h>
#import "Dog.h"
#import "Card.h" @interface Person : NSObject
{
Dog *_dog;
Card *_card;
int _age;
} - (void) setDog:(Dog *)dog;
- (Dog *) dog; - (void) setCard:(Card *)card;
- (Card *) card; - (void) setAge:(int)age;
- (int) age; @end

Person.m文件:

 //
// Person.m
// 15-内存管理03-对象之间的内存管理
// #import "Person.h" @implementation Person //_age 成员变量不是对象,所以不用管理
- (int)age
{
return _age;
} - (void)setAge:(int)age
{
_age = age;
} //set方法的管理
//release旧的成员变量,retain新的成员变量
- (void)setCard:(Card *)card
{
if (card != _card)//判断是否为旧的成员变量
{
[_card release];
_card = [card retain];
}
} - (Card *)card
{
return _card;
} - (void)setDog:(Dog *)dog
{
if (dog != _dog)
{
[_dog release];
_dog = [dog retain];
}
} - (Dog *)dog
{
return _dog;
} - (void)dealloc
{
//Person在拥有card对象时,在set方法retain,所以在Person对象释放之前,将由Person的dealloc方法来释放card对象
//"谁污染,谁治理"
[_card release];
[_dog release];
NSLog(@"Person被销毁了");
[super dealloc];
}
@end

OC基础--OC内存管理原则和简单实例的更多相关文章

  1. OC基础--OC中类的定义

    OC中类的定义与使用跟C#和java差别相当明显,做个笔记,牢记并加以区别! 一.OC中类的定义:关键字@implementation 和 @end 注意事项: 1.定义好一个类之后,要让这个类继承N ...

  2. ios开发之OC基础-oc小程序

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  3. OC基础--OC中的类方法和对象方法

    PS:个人感觉跟C#的静态方法和非静态方法有点类似,仅仅是有点类似.明杰老师说过不要总跟之前学过的语言做比较,但是个人觉得,比较一下可以加深印象吧.重点是自己真的能够区分开! 一.OC中的对象方法 1 ...

  4. OC基础--OC中类的声明与定义

    OC中设计一个类的步骤: 一.声明类: 1.用到的关键字--@interface 和 @end 2.类名 3.继承NSObject 4.属性 5.方法(行为,只需要声明) 二.实现(定义)类 1.用到 ...

  5. OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏

    1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...

  6. OC基础笔记目录

    OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...

  7. OC基础15:内存管理和自动引用计数

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...

  8. 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

    四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...

  9. OC基础 内存管理

    OC基础  内存管理 我们所了解的c语言内存管理,如下: (1)c语言的内存分配:char *p = (char*)malloc(100*sizeof(char)); (2)c语言的内存释放:free ...

随机推荐

  1. uva 1152 4 values whose sum is zero ——yhx

    The SUM problem can be formulated as follows: given four lists A;B;C;D of integer values, computehow ...

  2. java分别通过httpclient和HttpURLConnection获取图片验证码内容

    前面的文章,介绍了如何通过selenium+Tesseract-OCR来识别图片验证码,如果用接口来访问的话,再用selenium就闲的笨重,下面就介绍一下分别通过httpclient和HttpURL ...

  3. 深度优先搜索 codevs 1064 虫食算

    codevs 1064 虫食算 2004年NOIP全国联赛提高组  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 所 ...

  4. Unity4.6新UI系统初探(uGUI)

    一.引言 Unity终于在即将到来的4.6版本内集成了所见即所得的UI解决方案(视频).事实上从近几个版本开始,Unity就在为这套系统做技术扩展,以保证最终能实现较理想的UI系统.本文试图通过初步的 ...

  5. java9-1.类,抽象类,接口的综合小练习

    /* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 为了出国交流,跟乒乓球相关的人员都需要学习英语. 请用所学知识: 分析,这个案例中有哪些抽象类,哪些接口 ...

  6. C#带cookie Post和Get方式发送数据,保持cookie

    在实际编程中,可能需要读取特定网页的信息,但很多网站需要用户登录后,才能够获取相关的页面内容,这就需要编程者先临时存储当前的cookie,在C#中可以使用CookieContainer 对象来保存登录 ...

  7. android volley get请求使用

    调用百度api微博热门精选接口,使用了volley,简单说说volley get的请求方式的使用 header的设置和请求参数的设置,见代码如下: private void getWeixinNews ...

  8. C语言 百炼成钢10

    //题目28:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第 //3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 //问第一个人 ...

  9. liunx检查与安装软件包

    检查软件包# rpm -qa | grep 例如:# rpm -qa | grep make检查make包 安装软件包 yum install 例如:yum install  unixODBC安装un ...

  10. 三层ViewPager嵌套 的事件处理

    这么多ViewPager嵌套在一起肯定会遇到冲突 不信你试试(笑脸) 下面来说怎么解决.....太为难我这个菜b了 设置外部的父控件不要拦截我子控件的事件,通过重写ViewPager的 @Overri ...