Ios property属性详解
Property是Objective-c为自动生成setter和getter方法而加入的属性。其不仅可以帮助我们管理存储器还有一些其他特殊作用比如多线程控制、内存管理。
@property的关键字分为三类:原子性、操作性、内存管理。通常默认为atomic、readwrite、assign,因此其关键字最多可以设置三个。
原子性:
1) atomic:atomic指的是原子操作,意味着同时只有一个线程可以访问实例变量,可以在多线程操作时使用以确保线程安全。
2) nonatomic:nonatomic跟atomic正好相反,表示非原子操作,可以被多个线程同时访问。它的效率比atomic快,不能确保线程安全,一般在单线程中使用。
操作性:
1) readwrite:表示可以同时进行读和写操作(即拥有getter和setter方法)。
2) readonly:表示只有getter方法没有setter方法。
内存管理:
1) assign:assign用于值类型,如int、float、double、NSInteger、CGFloat等表示单纯的复制。另外delegate一般用assign
2) retain:在setter方法中需要对传入的对象进行引用计数加1的操作。就是对传入的对象拥有所有权使其不会被释放。
retain声明实例变量setter方法:
- (void)setRetainStr:(NSString *)RetainStr {
if (_RetainStr!=RetainStr) {
[_RetainStr release];
_RetainStr=[RetainStr retain];
}
}
3) strong:strong是retain的一个可选的替代。和retain的意思一样表示实例变量对传入的对象拥有所有权,即强引用(strong)。
4) weak:在setter方法中对传入的对象不进行引用计数器加1操作即对传入的对象没有所有权。当对象释放后永weak声明的实例变量之乡nil。
5) copy:copy为深复制,指的是实例变量对传入对象的副本拥有所有权。修改副本原对象不发生改变。