copy关键字的使用
来源:互联网 发布:最好生活网络投资理财 编辑:程序博客网 时间:2024/06/05 20:00
平时我们使用对象之间的传值都是采用retain count +1的方式,这种方式的适用于当对象的某属性的值改变时,引用该对象的不同指针会同时改变,因为这两个指针指向的是同一个内存地址,
但如果需求是,当一个指针执行的对象属性值发生改变时,不影响另一个对象,那么需要分配两个不同的内存地址,也就是说,我们就不可以采用retain关键字了,而是要采用copy 关键字,因为copy关键字会在复制时重新创建一个新的对象。 举例说明一下copy使用
这里创建一个Person类
Person.h,代码:
@interface Person : NSObject <NSCopying>{
NSString *name;
NSString *email;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic,retain)NSString *email;
@end
Person.m文件
#import “Person.h”
@synthesize name,email;
- (id)initWithName:(NSString *)theName andEmail:(NSString *)theEmail
{
self = [super init];
if (self){
self.name = theName;
self.email = theEmail;
}
}
- (id)copyWithZone:(NSZone *)zone
{
Person *aPerson = [[Person allocWithZone:zone] initWithName:[self name] andEmail:[self email]];
return aPerson;
}
- (void)delloc
{
[name release];
[email release];
[super dealloc];
}
这里说明一下,
在对象之间copy,首先需要类是继承自NSObject,其次需要实现<NSCoding>协议,最后在方法中实现
- (id)copyWithZone:(NSZone *)zone 方法
如果没有此方法那么在copy对象,程序会直接宕机,并提示Person类找不到copyWithZone方法。
这里还有一点需要注意的是,通常在NSArray之间copy,是retain方式的复制,也就是直接将引用系数+1,
如下 代码:
NSArray *array1 = [[NSArray alloc] initWithObjects:person1,person2,person3,nil];
NSMutableArray *array2 = [array1 copy]; 或使用
NSMutableArray *array2 =[ [NSMutableArray alloc] initWithArray:array1];
如果想使用两个不同内存,那么就需要使用到NSArray 的deep copy,例如:
NSArray *array1 = [[NSArray alloc] initWithObjects:person1,person2,person3,nil];
NSMutableArray *array2 = [[NSMutableArray alloc] initWithArray:array1 copyItems:YES];
转自:http://jordy.easymorse.com/?cat=26
- copy关键字的使用
- ios copy关键字的使用
- ios copy关键字的使用
- ios copy关键字的使用
- ios copy关键字的使用
- iOS Copy 关键字 的使用 原创 + 转载
- NSString 使用 copy 关键字和 strong 关键字修饰的异同
- iOS开发怎么使用copy关键字
- copy关键字
- iOS的copy,strong,weak,assign关键字的使用,网罗下来大概总结一下
- ObjC类与属性的copy关键字
- 有关copy关键字的一些问题
- strong 和 copy关键字的区别
- IOS-36-Object-C语法之属性关键字的使用(assign/weak/strong/copy)
- OC中@property属性关键字的使用(assign/weak/strong/copy)
- iOS常用关键字(assign, copy,retain等)的使用与区别
- iOS 关键字 copy,assign,strong,retain,weak,readonly,readwrite,nonatomic,atomic,unsafe_unretained的使用与区别
- copy函数的使用
- 叶孤城博客
- Eclipse 如何 配置 Hibernate JPA
- 基于Android的计步器(Pedometer)的讲解(二)——柱状图分析2
- 64位oracle中用plsql不支持中文
- X64_Xcelera-CL_PX4采集卡测试记录
- copy关键字的使用
- 无线测试(2015.1.1听课笔记)
- 在UIWebView中媒体文件的展示和HTML字符串的展示
- 在Mac OS X上安装Virtual Box 和 Vagrant
- 10.4 第十章小结
- 学习
- 一个过期的创业想法
- ArcEngine创建缓冲区,并查询缓冲区内要素
- 第二章 吸引你的眼球—UI编程(7)