@property 参数详解
来源:互联网 发布:mac找不到照片宗卷 编辑:程序博客网 时间:2024/05/22 12:50
@property和@synthesize总是配对使用的,功能是让编译器自动生成一个与数据成员相关的读写方法,类似与Java的setter/getter方法。
@property的参数有三种类型:
读写属性: (readwrite/readonly)
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)
读写属性: (readwrite/readonly)
读写属性即设置数据成员是可写还是只读,默认是readwrite,如果是readonly则相当于不生成setter方法。
readwrite setter和getter方法都生成,即可读也可写;
readonly 只生成getter方法;
原子性: (atomicity/nonatomic)
原子性即设置数据成员是否可以多线程访问,默认nonatomic,这样性能更好。
setter语意:(assign/retain/copy)
(一)
assign 基本数据类型和代理对象
retain 对象
copy NSString对象
(二)
assign
@property(nonatomic,assign) NSString * name;
-(void) setName: (NSString *)newName
{
name = newName;
// 直接赋值,此时newName和name完全相同,地址都是0XAAAA ,内容为0X1111 ,即name只是newName的别名,对任何一个操作就等于对另一个操作。因此retainCount不需要增加.
}
-(NSString *)name
{
return name;
}
retain
@property(nonatomic,retain) NSString * name;
-(void) setName: (NSString *)newName
{
if (name != newName) {
[name release];name = [newName retain];
// 此时name的地址不再为0XAAAA,可能为0XAABB,但是内容依然为0X1111.相当于两个指针都指向了同一个内存地址。因此name和newName都可以管理’abc’所在的内存。因此 retainCount需要增加1.
}
-(NSString *)name
{
return name;
}
copy
@property(nonatomic,copy) NSString * name;
-(void) setName: (NSString *)newName
{
if (name != newName) {
[name release];name = [newName copy];
// 此时会在堆上重新开辟一段内存存放@’abc’,比如0X1122,内容为@’abc’,同时会在栈上为name分配空间,比如地址:0XAACC,内容为0X1122, 因此retainCount增加1供name来管理0X1122这段内存.
}
}
-(NSString *)name
{
return name;
}
总结
assign: 简单赋值,不更改索引计数,对基础数据类型(NSInteger)和C数据类型(int, float, double, char, bool等)
copy:先旧值release,再Copy出新的对象,retainCount为1
retain:进行release旧值再retain输入值(newName)
retain是指针拷贝,copy 是内容拷贝
注意
当类拥有mutable子类时,你应该使用copy,而不是retain。例如:NSAArray,NSSet,NSDictionary,NSData的,NSCharacterSet,NSIndexSet,NSString
- @property 参数详解
- IOS@property参数详解
- @property关键字和参数详解
- 【Objective-C学习-5】@property参数详解
- property参数
- @property 参数
- @property参数
- @property参数
- @property参数
- @property参数
- Objective - C基础: 第五天 - 5.@property - 参数详解
- Objective-C内存管理(四)@property相关参数详解
- @property详解
- @property 详解
- @property详解
- Property详解
- @property详解
- @property各参数
- Objective-c @Class 说明
- OC中的 KVC
- OC KVO
- OC 内存管理
- NSString的方法
- @property 参数详解
- AppDelegate class文件简介
- UIwindow UIView UIViewControl
- UIResponder类
- IOS 计时器 NSTimer
- UIApplication sharedApplication
- UI涂鸦
- 霓虹灯效果(UIView)
- CGRectInset和CGRectOffset区别