属性(property)是Objective-C封装对象数据的一个重要特性。声明一个属性要加上特定的关键字。不同关键字修饰的属性在内存管理中有不一样的结果。
下面是Objective-C中常用关键字的含义。
strong:指向并拥有该对象。其修饰对象引用计数会增加1.只要引用计数不为0,该对象就不会销毁。可以手动设为nil销毁该对象。
retain:在ARC中与strong类似。
weak:指向但不拥有该对象。其修饰的对象引用计数不会增加,weak修饰的对象消失后会自动将指针设为nil,主要用来避免循环引用。
copy:建立一个和新对象内容相同且引用计数为1的对象,指针指向这个对象并释放之前的旧对象。有对应可变数据类型的不可变数据类型都应该用copy来修饰,例如NSString、NSArray、NSDictionary。
assign:修饰基本数据类型,例如NSInteger、CGFloat。这些数值都存在栈中。assign如果用来修饰对象会造成野指针。
atomic:原子性,保证setter和getter的完整性。但不是绝对的线程安全。可以用@synchronized加锁。
nonatomic:不保证setter和getter。
基本数据类型的默认关键字为:atomic、readwrite、assign
普通属性的默认关键字为:atomic、readwrite、strong
网友评论