`
rayln
  • 浏览: 412146 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Copy方法

阅读更多
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方法.docx

    python的copy方法 Python的copy方法是一个非常有用的函数,它可以用来复制一个对象。在Python中,对象是指任何可以被赋值给一个变量的东西,包括数字、字符串、列表、元组、字典等等。当我们需要复制一个对象时,...

    Array.Copy 方法

    Array.Copy 方法,介绍Array.copy的几种用法

    学学Python_字符串09_字典的方法02 copy方法

    字典的copy方法,文章:https://blog.csdn.net/yysyangyangyangshan/article/details/82891001

    DataTable类Clone方法与Copy方法的区别分析

    DataTable.Copy 方法:复制该 DataTable 的结构和数据。 我们可以编写如下的程序,进行验证: 代码如下: static string connStr = “Server=.\\sqlexpress;Initial Catalog=hr;Integrated Security=True”;  ...

    node.js中的buffer.copy方法使用说明

    主要介绍了node.js中的buffer.copy方法使用说明,本文介绍了buffer.copy的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下

    深拷贝与浅拷贝;copy与mutableCopy;容器类型的深拷贝;copy和strong;

    1、只有NS类型调用copy方法才是浅拷贝,其他的情况全是深拷贝 2、容器类调用copy或mutableCopy能出现的深拷贝的情况下,只是容器的深拷贝,而非容器内元素的深拷贝 3、无论是声明NSString还是NSMutableString类型的...

    java实现的文件复制

    //split()方法按照指定的分隔符拆分字符串为字符数组 String[] c = command.split(" "); String pathName = c[1]; String target_path = c[2]; FileUtil fileUtil = new FileUtil(); //读取文件 ...

    关于Python中copy()方法的讨论

    一、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] ...

    在VFP中调用WORD的基本方法

    ①Copy 方法 18 ②Cut 方法 18 ③Paste 方法 18 ④Collapse 方法 18 ⑤InsertBefore 方法 19 ⑥InsertAfter方法 19 ⑦TypeText方法 19 ⑧Delete 方法 20 ⑨移动插入点的方法 20 ㈠Move 方法 20 ㈡MoveDown 方法 20 ...

    WM_COPYDATA使用方法

    关于WM_COPYDATA使用方法,里面共有两个例子,包括进程里面的传送及进程间的传送。传送结构体及传送JPG图片

    javascript语言参考+教程 CHM

    Copy 方法; CopyFile 方法; CopyFolder 方法; CreateFolder 方法; CreateTextFile 方法; Delete 方法; DeleteFile 方法; DeleteFolder 方法; DriveExists 方法; Exists 方法; FileExists 方法; ...

    FastCopy v2.08

    Fastcopy使用方法: 第一种,先选择来源目录,然后选择目标目录,点[执行]开始拷贝; 第二种,注册右键菜单。点菜单“设置---&gt;右键扩展”弹出“右键扩展”对话框,然后点 [安装] 按钮即可注册右键菜单。在任意...

    commons-io-2.CHM

    copy方法:将输入流中的内容拷贝到输出流中,并可以指定字符编码。 5. copyLarge方法:将输入流中的内容拷贝到输出流中,适合大于2G内容的拷贝。 6. lineIterator方法:返回可以迭代每一行内容的迭代器。 7. ...

    fastcopy英文版

    一款很好用的数据传输软件,可以使很深的路径的文件也可以拷贝

    Chrome插件Enable Copy破解网站禁止复制插件

    1.Enable Copy 插件可以破解掉网页中因网站开发者使用JavaScript脚本启动的网页禁止复制功能,如果是别的方式(比如网页上的文本使用flash插件载入来禁止用户复制、右键等...,Enable Copy 插件的破解方法可能会失效...

    WM_COPYDATA消息

    _COPYDATA是一种非常强大却鲜为人知的消息。当一个应用向另一个应用... WM_COPYDATA是一种非常简单的方法,它在底层实际上是通过文件映射来实现的。它的缺点是灵活性不高,并且它只能用于Windows平台的单机环境下。

    文件快速复制-FastCopy-5.0.0-x86x64

    FastCopy 会根据源目录和目标目录是否在相同的硬盘(或 SSD)中,自动选择不同的方法。 不同的硬盘:读取和写入分别由单独的线程并行处理。 相同的硬盘:读取处理,直到大的缓冲区填满为止。当大缓冲区被填满时,...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

Global site tag (gtag.js) - Google Analytics