@property参数 retain assign copy readonly readwrite atomic nonatomic
来源:互联网 发布:java培训班有证吗 编辑:程序博客网 时间:2024/05/28 11:30
1. 苹果官方规定的内存管理原则
创建谁release : 如果你通过alloc、new或copy、mutableCopy来创建一个对象,那么你必须调用release或autorelease。
谁retain谁release :只要你调用了retain,就必须调用一次release
总结一下就是
有加就有减 ,曾经让对象的计数器+1,就必须在最后让对象计数器-1
在自己负责的区域内(某个方法范围内、某个对象内等。):有+,就得有-。
示例代码:
有一个Car类和Person类。
Person.h代码如下:
#import <Foundation/Foundation.h>#import "Car.h"@interface Person : NSObject@property (nonatomic,retain) Car *car;- (void)setCar:(Car *)car;- (void)goLasa;@end
Person.m的代码如下:
#import "Person.h"@implementation Person- (void)setCar:(Car *)car{ if(_car != car){ [_car release]; _car = [car retain]; }}- (void)dealloc{ [_car dealloc]; [super dealloc];}- (void)goLasa{ [_car run];}@end
这里最关键的代码就是setCar方法中的代码,setCar方法中的代码是@property中retain参数的实现方式,即先判断参数与旧值是否一样,如果不一样,则释放(release)旧值,并retain新值。因为Person对象对Car进行了retain,根据苹果内存管理原则,Person同样需要负责对Car进行release,什么时候进行release适合呢?自然就是Person类dealloc函数中即Person类释放前对属性Car也release一下。
(1)让Person类拥有car属性、dog属性,自己编写car属性与dog属性的get、set方法(复习内存管理代码)
(2)通过@property关键字自动生成内存管理代码
可以自己编写类属性的set,get方法,也可以通过@property参数来自动生成内存管理代码。
上面Person,Car的代码,通过指定@property参数进行内存管理的代码如下:
Person.h中指定代码是retain就可以了。
@property (nonatomic,retain) Car *car;
但是在Person.m中不再需要重写set方法中的代码,因为retain参数默认就是
- (void)setCar:(Car *)car{ if(_car != car){ [_car release]; _car = [car retain]; }}
还是需要重写dealloc函数,在里面添加 Car的release。
- (void)dealloc{ [_car dealloc]; [super dealloc];}
2. @property参数
控制set方法的内存管理
retain : release旧值,retain新值(用于OC对象),要配合nonatomic使用。
assign : 直接赋值,不做任何内存管理(默认,用于非OC对象类型)
copy : release旧值,copy新值(一般用于NSString *)
控制需不需生成set方法
readwrite :同时生成set方法和get方法(默认)
readonly :只会生成get方法
多线程管理
atomic :性能低(默认)
nonatomic :性能高(为iOS系统开发软件建议使用,为mac开发软件可以使用atomic)
控制set方法和get方法的名称
setter : 设置set方法的名称,一定有个冒号:
getter : 设置get方法的名称
@property (nonatomic, retain, setter = setUserName:, getter = getUserName) NSString *name;
一般只有BOOL类型的属性的get方法才会使用getter修改一下方法名为isXxxx,其他很少用的。
@property (nonatomic, assign) BOOL rich;
@property (nonatomic, assign, getter = isRich) BOOL rich;
- @property参数 retain assign copy readonly readwrite atomic nonatomic
- assign, retain, copy, readonly,readwrite,atomic, nonatomic
- assign, retain, copy, readonly,readwrite,atomic, nonatomic
- 关键字(nonatomic/atomic)、(copy/retain/assign/strong/weak )、(readonly / readwrite)、(@property/@synthesiz
- copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dynamic
- copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dynamic
- copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dynamic
- Objective-C中的@property和@synthesize用法及参数(readwrite/readonly)(assign/retain/copy)(atomicity/nonatomic)
- 属性readwrite,readonly,assign,retain,copy,nonatomic
- 属性readwrite,readonly,assign,retain,copy,nonatomic
- IOS属性(@property)的修饰词assign、weak、strong、retain、copy、nonatomic、atomic、readonly、readwrite解释、以及一部分内存优化方法
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- Objective-C+属性特性(assign+,+retain+,+copy+,+readonly+,+readwrite+,+atomic+,+nonatomic)
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- Objective-C 属性关键字(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- 什么是网络字节序,主机字节序
- HDU 1063 Exponentiation(大数乘法)
- 0013 Java基础之一切都是对象
- eclipse设置maven加载国内镜像
- 让CentOS默认生成core dump
- @property参数 retain assign copy readonly readwrite atomic nonatomic
- 应用内存优化之OnLowMemory&OnTrimMemory
- gulp及gulp说明
- jQuery attr("value") 和 val的区别
- 网络七层协议的形象说明
- 【1】基于TQ2440的MP3设计——【3、建立Linux 嵌入式交叉开发环境】
- mysql数据库MyISAM与InnoDB比较与选择
- eclipse中为控件添加id的时候,如果不clean就找不到这个id
- Hibernate annotations