@property相关属性

@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

你可能感兴趣的:(@property相关属性)