objective-c内存管理

 1.方法的基本使用
 1> retain :计数器+1,会返回对象本身
 2> release :计数器-1,没有返回值
 3> retainCount :获取当前的计数器
 4> 重写dealloc方法
  * 当一个对象要被回收的时候,就会调用
  * 一定要调用[super dealloc],这句调用要放在最后面
 
 2.概念
 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用
 2> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS)
 3> 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错

 

 

内存管理代码规范:
1.只要调用了alloc,必须有release(autorelease)
对象不是通过alloc产生的,就不需要release

2.set方法的代码规范
1> 基本数据类型:直接复制
- (void)setAge:(int)age
{
_age = age;
}

2> OC对象类型
- (void)setCar:(Car *)car
{
// 1.先判断是不是新传进来对象
if ( car != _car )
{
// 2.对旧对象做一次release
[_car release];

// 3.对新对象做一次retain
_car = [car retain];
}
}

3.dealloc方法的代码规范
1> 一定要[super dealloc],而且放到最后面
2> 对self(当前)所拥有的其他对象做一次release
- (void)dealloc
{
[_car release];
[super dealloc];
}

--------------------------------------

 

@property 参数

1.set方法内存管理相关的参数
* retain : release旧值,retain新值(适用于OC对象类型)
* assign : 直接赋值(默认,适用于非OC对象类型)
* copy : release旧值,copy新值

2.是否要生成set方法
* readwrite : 同时生成setter和getter的声明、实现(默认)
* readonly : 只会生成getter的声明、实现

3.多线程管理
* nonatomic : 性能高 (一般就用这个)
* atomic : 性能低(默认)

4.setter和getter方法的名称
* setter : 决定了set方法的名称,一定要有个冒号 :
* getter : 决定了get方法的名称(一般用在BOOL类型)

 

例如:

// 返回BOOL类型的方法名一般以is开头
@property (getter = isRich) BOOL rich;

//   
@property (nonatomic, assign, readwrite) int weight;
// setWeight:
// weight

// 
@property (readwrite, assign) int height;

@property (nonatomic, assign) int age;

@property (retain) NSString *name;

  

 

posted @ 2015-05-21 12:00  紅ノ肚兜メ  阅读(118)  评论(0编辑  收藏  举报