OC基础--OC内存管理原则和简单实例
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内存管理原则和简单实例的更多相关文章
- OC基础--OC中类的定义
OC中类的定义与使用跟C#和java差别相当明显,做个笔记,牢记并加以区别! 一.OC中类的定义:关键字@implementation 和 @end 注意事项: 1.定义好一个类之后,要让这个类继承N ...
- ios开发之OC基础-oc小程序
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
- OC基础--OC中的类方法和对象方法
PS:个人感觉跟C#的静态方法和非静态方法有点类似,仅仅是有点类似.明杰老师说过不要总跟之前学过的语言做比较,但是个人觉得,比较一下可以加深印象吧.重点是自己真的能够区分开! 一.OC中的对象方法 1 ...
- OC基础--OC中类的声明与定义
OC中设计一个类的步骤: 一.声明类: 1.用到的关键字--@interface 和 @end 2.类名 3.继承NSObject 4.属性 5.方法(行为,只需要声明) 二.实现(定义)类 1.用到 ...
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...
- OC基础笔记目录
OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...
- OC基础15:内存管理和自动引用计数
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...
- 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法
四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...
- OC基础 内存管理
OC基础 内存管理 我们所了解的c语言内存管理,如下: (1)c语言的内存分配:char *p = (char*)malloc(100*sizeof(char)); (2)c语言的内存释放:free ...
随机推荐
- 微博API使用
新浪微博的API开放平台: http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI IOS和Android都有SDK可以下载,ios的地址: https:// ...
- NP完全问题 NP-Completeness
原创翻译加学习笔记,方便国人学习算法知识! 原文链接http://www.geeksforgeeks.org/np-completeness-set-1/ 我们已经找到很多很高效的算法来解决很难得问题 ...
- Linux 安装oracle客户端
环境: CentOS release 6.4 (Final) 一.下载文件 1.首先要查看oracle版本,对应的SQL如下: select * from V$version ; 2.根据oracl ...
- 使用Loadrunner进行http接口压力测试
业务描述: 在业务系统里进行查询操作,查询的结果是通过请求http接口,从系统中处理并将结果以json字符串返回. 本文就讲述使用Loadrunner对此类接口进行压力测试并记录相关的性能指标数据: ...
- 使用JspStudy集成环境快速部署jsp项目
1. 安装jdk 本人网盘资源:https://yunpan.cn/ckZLNbqxkDYYe (提取码:b5e8) 去jdk官网下载最新的jdk: http://www.oracle.com/tec ...
- 时间与NSString转换
//传进来时间字符串转换 + (NSString *) getChatTimeString:(NSString *)timeString { if (timeString==nil || timeSt ...
- Discuz X3核心文件解析
<?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subjec ...
- CSS 实现加载动画之五-光盘旋转
今天做的这个动画叫光盘旋转,名字自己取的.动画的效果估计很多人都很熟悉,就是微信朋友圈里的加载动画.做过前面几个动画,发现其实都一个原理,就是如何将动画的元素如何分离出来.这个动画的实现也很简单,关键 ...
- Audrion小车实验过程
Audrion小车实验过程 一.实验过程 拷贝光盘文件,安装驱动及Arduino软件,观看了教学视频,明白了软件操作界面的各类按钮的含义,进行了事例的上传实验. 接下来就进行了小车的安装工作,这部分不 ...
- 20145208 《Java程序设计》第一周学习总结
20145208 <Java程序设计>第X周学习总结 教材学习内容总结 这几天我学习java的基础内容,这几天我学习了java的基础内容,从教材上面我了解到了java是一种程序语言,但他又 ...