码迷,mamicode.com
首页 > 其他好文 > 详细

OC中内存管理

时间:2015-04-07 11:28:58      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

内存管理:

谁retain ,谁release

谁alloc ,谁release

 

每一个对象在创建时都会创建一个引用计数器,系统会根据引用计数器判断对象需要不需要被回收

对象在创建时引用计数器是1

当调用retain消息 计数器 +1   返回对象本身

当调用release消息 计数器 -1

retainCount 获取计数器

当对象的计数器变0之后,当前对象就变成僵尸对象(野指针)

 

 

对象在被销毁时,系统会发送一条dealloc消息

1> 一般都会重写dealloc方法,在这里释放相关资源,所有dealloc相当于对象的遗言

2> 一旦重写dealloc方法,就必须调用[super dealloc],并且放在最后调用

 

- (void)dealloc{

   // 其他操作

   [super dealloc];

}

 

 

/*

内存管理规范

1. 只要调用alloc,必须release (autorelease)

 

set操作

1> 基本数据类型直接赋值

- (void)setAge:(int)age{

_age = age;

}

 

2> oc对象

- (void)setCar:(Car *)car

{

if ( _car != car ){

        // 对以前对象进行一次release

        [_car release];

        // 对新对象做一次retain

_car = [car retain];

}

}

3> dealloc规范

1. 一定要[super dealloc] ,而且放到最后

2. 对当前(self)所有对象做一次release

- (void)dealloc

{

[_car release];

[super dealloc];

}

 */

 

利用@property自动管理内存

@property (retain) Car *car;

 

dealloc 还得自己写

 

@property参数

1.       内存管理相关的参数

l       retain:release旧值,retain新值(适合oc对象)

l       assign:直接赋值(适合基本数据类型,非OC对象)

l       copy:retain旧值,release新值

2.       是否生成set方法

l       readonly 只读

l       readwrite 读写

3.       多线程

l       nonatomic 性能高

l       atomic性能低(默认)

4.       setter,getter方法的名称

l       seter自定义setter方法名

l       getter自定义getter方法名

  

 技术分享

 技术分享

@class的作用:仅仅告诉编译器,这个就是一个类

例 @class Car // 告诉编译器Car仅仅是一个类

开发中规范

一般在.h文件中用@class告诉编译器他就是个类

在.m文件中#import “文件.h”

 

两端循环引用

1>    一端用retain

2>    另一端用assign

 

OC中内存管理

标签:

原文地址:http://www.cnblogs.com/MrTao/p/4397598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!