属性项目的定义(property)copy&retain的区别
2011-03-12 18:29
411 查看
原文链接:http://c.gzl.name/archives/85
view plaincopy to clipboardprint?
@property (copy, nonatomic) NSString *title;
什么是assign,copy,retain之间的区别?
assign : 简单赋值,不更改索引计数(Reference Counting)。
copy : 建立一个索引计数为1的对象,然后释放旧对象
retain :释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
retain的实际语法为:
view plaincopy to clipboardprint?
- (void)setName:(NSString *)newName {
if (name != newName) {
[name release];
name = [newName retain];
// name’s retain count has been bumped up by 1
}
}
说了那么麻烦,其实接下来的话最重要:
如果你不懂怎么使用他们,那么就这样 ->
使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
使用copy: 对NSString
使用retain: 对其他NSObject和其子类
Copy,retain的区别?
assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。
Retain vs. Copy!!
copy : 建立一个索引计数为1的对象,然后释放旧对象
retain :释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
那上面的是什么该死的意思呢?
Copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString 对象,地址为0×1111 ,内容为@”STR”
Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同,新的对象retain为1 ,旧有对象没有变化
retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
也就是说,retain 是指针拷贝,copy 是内容拷贝。哇,比想象的简单多了…
nonatomic关键字:
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
view plaincopy to clipboardprint?
@property (copy, nonatomic) NSString *title;
什么是assign,copy,retain之间的区别?
assign : 简单赋值,不更改索引计数(Reference Counting)。
copy : 建立一个索引计数为1的对象,然后释放旧对象
retain :释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
retain的实际语法为:
view plaincopy to clipboardprint?
- (void)setName:(NSString *)newName {
if (name != newName) {
[name release];
name = [newName retain];
// name’s retain count has been bumped up by 1
}
}
说了那么麻烦,其实接下来的话最重要:
如果你不懂怎么使用他们,那么就这样 ->
使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
使用copy: 对NSString
使用retain: 对其他NSObject和其子类
Copy,retain的区别?
assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。
Retain vs. Copy!!
copy : 建立一个索引计数为1的对象,然后释放旧对象
retain :释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
那上面的是什么该死的意思呢?
Copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString 对象,地址为0×1111 ,内容为@”STR”
Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同,新的对象retain为1 ,旧有对象没有变化
retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
也就是说,retain 是指针拷贝,copy 是内容拷贝。哇,比想象的简单多了…
nonatomic关键字:
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
相关文章推荐
- 属性项目的定义(property)copy&retain的区别
- 属性项目的定义(property)copy&retain的区别
- 自动释放池工作原理,self = [super init]和定义属性时,什么时候用 assign、retain、copy 以及它们的之间的区别?
- 【整理】Object-C中的属性(Property)的Setter:assign,copy,retain,weak,strong之间的区别和联系
- property中的属性strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- iOS中 property中的属性strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- OC中的一些关键术语&&@property assign retain copy的区别
- Objective-C 2.0属性(Property) retain和copy的区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- Objective-C开发之----atomic与nonatomic,assign,copy与retain的定义和区别
- iOS开发笔记--atomic与nonatomic,assign,copy与retain的定义和区别
- iOS中atomic 与 nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- 属性特性copy和retain的区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- iOS - property,strong,weak,retain,assign,copy,nomatic 的区别及使用
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- iOS - property,strong,weak,retain,assign,copy,nomatic 的区别及使用