NSArray NSMutableArray | copy | NSArray |
NSArray NSMutableArray | mutableCopy | NSMutableArray |
NSDictionary NSMutableDictionary | copy | NSDictionary |
NSMutableDictionary NSDictionary | mutableCopy | NSMutableDictionary |
//
// main.m
// MutableCopy
//
// Created by rayln on 13-9-13.
// Copyright (c) 2013年 rayln. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Student.h"
void copy(){
//若要copy自定义的对象,必须实现NSCopying协议, 并且实现copyWithZone方法
Student *stu = [[Student alloc] init];
Student *stu1 = [stu copy];
[stu release];
[stu1 release];
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
#pragma mark - mutablecopy 深拷贝
NSString *str1 = @"100";
NSMutableString *str2 = [str1 mutableCopy];
//copy出来的对象需要释放内存
[str2 release];
#pragma mark - copy 浅拷贝
NSString *string1 = @"101";
NSString *string2 = [string1 copy];
//string1对象和string2对象是同一个对象,因为NSString本来就是不可变的
[string2 release];
Student *stu = [[Student alloc] init];
NSMutableString *name = [[NSMutableString alloc] initWithString:@"rayln"];
NSMutableString *passport = [[NSMutableString alloc] initWithString:@"445281"];
stu.name = name;
stu.passport = passport;
[name appendString:@"Guan"];
[passport appendString:@"1983"];
//由此可见,retain策略的话,外面重新符值,student的name也会改变
//使用copy策略的话,外面重新符值,student的passport还是没有改变
NSLog(@"Student.name:%@ name:%@", stu.name, name);
NSLog(@"Student.passport:%@ passport:%@", stu.passport, passport);
[name release];
[passport release];
[stu release];
}
return 0;
}
Student.h
//
// Student.h
// MutableCopy
//
// Created by rayln on 13-9-13.
// Copyright (c) 2013年 rayln. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Student : NSObject <NSCopying>
//建议NSString对象用copy,其他对象用retain策略
@property (nonatomic, retain) NSString *name;
@property (nonatomic, copy) NSString *passport;
@end
Student.m
//
// Student.m
// MutableCopy
//
// Created by rayln on 13-9-13.
// Copyright (c) 2013年 rayln. All rights reserved.
//
#import "Student.h"
@implementation Student
//实现copyWithZone方法,使用copy方法必须实现他
- (id)copyWithZone:(NSZone *)zone{
Student *stu = [[Student allocWithZone:zone] init];
stu.name = self.name;
stu.passport = self.passport;
return stu;
}
- (void)dealloc{
[_name release];
[_passport release];
[super dealloc];
}
@end
分享到:
相关推荐
python的copy方法 Python的copy方法是一个非常有用的函数,它可以用来复制一个对象。在Python中,对象是指任何可以被赋值给一个变量的东西,包括数字、字符串、列表、元组、字典等等。当我们需要复制一个对象时,...
Array.Copy 方法,介绍Array.copy的几种用法
字典的copy方法,文章:https://blog.csdn.net/yysyangyangyangshan/article/details/82891001
DataTable.Copy 方法:复制该 DataTable 的结构和数据。 我们可以编写如下的程序,进行验证: 代码如下: static string connStr = “Server=.\\sqlexpress;Initial Catalog=hr;Integrated Security=True”; ...
主要介绍了node.js中的buffer.copy方法使用说明,本文介绍了buffer.copy的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
1、只有NS类型调用copy方法才是浅拷贝,其他的情况全是深拷贝 2、容器类调用copy或mutableCopy能出现的深拷贝的情况下,只是容器的深拷贝,而非容器内元素的深拷贝 3、无论是声明NSString还是NSMutableString类型的...
//split()方法按照指定的分隔符拆分字符串为字符数组 String[] c = command.split(" "); String pathName = c[1]; String target_path = c[2]; FileUtil fileUtil = new FileUtil(); //读取文件 ...
一、copy方法的作用 案例一:列表b对列表a进行备份,此后对列表a进行更改,保证列表b不受影响。 错解: a = [1, 2] b = a a.append(3) print('a:', a, '\nb:', b) 错解运行结果: a: [1, 2, 3] b: [1, 2, 3] ...
①Copy 方法 18 ②Cut 方法 18 ③Paste 方法 18 ④Collapse 方法 18 ⑤InsertBefore 方法 19 ⑥InsertAfter方法 19 ⑦TypeText方法 19 ⑧Delete 方法 20 ⑨移动插入点的方法 20 ㈠Move 方法 20 ㈡MoveDown 方法 20 ...
关于WM_COPYDATA使用方法,里面共有两个例子,包括进程里面的传送及进程间的传送。传送结构体及传送JPG图片
Copy 方法; CopyFile 方法; CopyFolder 方法; CreateFolder 方法; CreateTextFile 方法; Delete 方法; DeleteFile 方法; DeleteFolder 方法; DriveExists 方法; Exists 方法; FileExists 方法; ...
Fastcopy使用方法: 第一种,先选择来源目录,然后选择目标目录,点[执行]开始拷贝; 第二种,注册右键菜单。点菜单“设置--->右键扩展”弹出“右键扩展”对话框,然后点 [安装] 按钮即可注册右键菜单。在任意...
copy方法:将输入流中的内容拷贝到输出流中,并可以指定字符编码。 5. copyLarge方法:将输入流中的内容拷贝到输出流中,适合大于2G内容的拷贝。 6. lineIterator方法:返回可以迭代每一行内容的迭代器。 7. ...
一款很好用的数据传输软件,可以使很深的路径的文件也可以拷贝
1.Enable Copy 插件可以破解掉网页中因网站开发者使用JavaScript脚本启动的网页禁止复制功能,如果是别的方式(比如网页上的文本使用flash插件载入来禁止用户复制、右键等...,Enable Copy 插件的破解方法可能会失效...
_COPYDATA是一种非常强大却鲜为人知的消息。当一个应用向另一个应用... WM_COPYDATA是一种非常简单的方法,它在底层实际上是通过文件映射来实现的。它的缺点是灵活性不高,并且它只能用于Windows平台的单机环境下。
FastCopy 会根据源目录和目标目录是否在相同的硬盘(或 SSD)中,自动选择不同的方法。 不同的硬盘:读取和写入分别由单独的线程并行处理。 相同的硬盘:读取处理,直到大的缓冲区填满为止。当大缓冲区被填满时,...
《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...