@property
1.Assign
简单赋值,不更改引用计数
(例如NSInteger,CGFloat)和C数据类型(int,float, double, char,等)
适用简单数据类型
对应内部get和set实现(arc):
- (void)setName:(NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
}
2.retain
与strong相对应,使用了引用计数,retain+1,release -1;当引用计数为0时,dealloc会被调用,内存被释放
- (void)setName:(NSString *)name{
if (_name != name) {
[ _name release];
_name = [name retain];
}
}
- (NSString *)name{
return [[ _name retain] autorelease];
}
3.copy
生成的对象与原对象的关系是:与原对象内容相同内存地址不同的新对象
- (void)setName:(NSString *)name{
if (_name != name) {
[ _name release];
_name = [name copy];
}
}
- (NSString *)name{
return [[ _name retain] autorelease];
}
4.atomic
原子属性:是线程安全的,该属性下只允许一个线程访问该对象,因此会影响运行速度;但该属性下会消耗大量的内存。
5.noatomic
非线程安全,允许多个线程访问,运行速度快
6.strong
强引用:引用并持有对象,当不存在引用时,对象才能够销毁
7.weak
与assign相对应,弱引用;当引用的对象被释放后,weak指针指向nil防止野指针。
8,readonly
只有get方法,没有set方法
9,readwrite//默认属性
有get/set方法
10,unsafe_unretauined
用在ARC编译环境下,在此环境下,与assign相似。它只是告诉ARC如何正确地调用声明为unsafe_unretauined变量的retain和release