首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

@property的 nonatomic/retain/copy/assign的含意

2012-07-08 
@property的 nonatomic/retain/copy/assign的含义nonatomic:(缺省下是atomic,支持多线程)不加这个那么这个

@property的 nonatomic/retain/copy/assign的含义

nonatomic:(缺省下是atomic,支持多线程)不加这个那么这个定义的变量就支持对线程.出于对程序性能上的考虑,一般情况下不会用到多线程,所以加上这个.

//----------------------------------------------------------------

原贴地址:http://www.cocoachina.com/bbs/read.php?tid=1848&keyword=retain

?

举个例子可能更好理解点?
NSString *pt = [[NSString alloc] initWithString:@"abc"];?
上面一段代码会执行以下两个动作?
1 在堆上分配一段内存用来存储@"abc"??比如:内存地址为:0X1111 内容为 "abc"?
2 在栈上分配一段内存用来存储pt??比如:地址为:0Xaaaa 内容自然为0X1111???
下面分别看下assign?retain?copy?
assign的情况:NSString *newPt = [pt assing];????
此时newPt和pt完全相同 地址都是0Xaaaa??内容为0X1111??即newPt只是pt的别名,对任何一个操作就等于对另一个操作。 因此retainCount不需要增加。?
retain的情况:NSString *newPt = [pt retain];????
此时newPt的地址不再为0Xaaaa,可能为0Xaabb 但是内容依然为0X1111。 因此newPt 和 pt 都可以管理"abc"所在的内存。因此 retainCount需要增加1???
copy的情况:NSString *newPt = [pt copy];??
此时会在堆上重新开辟一段内存存放@"abc" 比如0X1122 内容为@"abc 同时会在栈上为newPt分配空间 比如地址:0Xaacc 内容为0X1122 因此retainCount增加1供newPt来管理0X1122这段内存?

热点排行