`
rayln
  • 浏览: 431411 次
  • 性别: 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_字符串09_字典的方法02 copy方法

    通过阅读和实践《学学Python》系列教程中的"字符串09_字典的方法02 copy方法",你可以更深入地掌握这些概念。同时,提供的示例文件,如`dictionaryOperate.py`、`dictionaryMethod.py`等,提供了实践这些方法的代码...

    Array.Copy 方法

    `Array.Copy`方法是.NET框架中的一个非常重要的成员,它属于`System.Array`类,用于在数组之间高效地复制元素。这个方法提供了多种重载形式,以适应不同的需求,包括处理不同类型和大小的索引以及数组长度。接下来,...

    python的copy方法.docx

    Python的`copy`方法是编程中经常用到的一个功能,特别是在处理复杂数据结构时,比如列表、字典等。此方法允许我们创建一个对象的新副本,这样原始对象的修改就不会影响到副本。本文将深入探讨Python的`copy`方法,...

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

    相比之下,DataTable.Copy方法不仅复制了DataTable的结构,还复制了所有的数据。这意味着新表dtCopy将与原表dt有完全一样的列、约束、索引、关系,而且每一条数据都将被复制过来。在上述代码的Copy()函数中,dtCopy...

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

    Buffer.copy方法是Buffer类中的一个常用方法,用于从源Buffer复制数据并将其粘贴到目标Buffer中。这个方法对于需要在内存中直接处理数据块的应用程序来说非常有用。 buffer.copy方法的基本语法为: ``` buffer.copy...

    Copy文件夹下面所有文件

    `File.Copy` 方法用于复制文件。它接受三个参数:源文件路径、目标文件路径以及是否覆盖同名文件的布尔值。在这个例子中,`File.Copy(f.FullName, destName, true)` 用于实际复制文件。 ### 3. 递归复制文件夹 在这...

    excel(xls或xlsx)便捷copy及poi操作demo.rar

    java spire.xls.free 快速copy excel副本或修改名称另存为、java poi操作excel(xls或者xlsx)样例 excel便捷copy jar包下载地址https://download.csdn.net/download/qq_25073261/85060851

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

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

    C#实现大文件Copy源码

    在处理大文件时,标准的System.IO.File.Copy方法可能会遇到性能问题,因为它是逐块读取整个文件后再进行复制,这在处理GB级别的大文件时可能会导致内存压力和效率低下。因此,开发人员通常会采用自定义的方式来实现...

    高通golden copy验证方案使用说明.docx

    Golden Copy 验证方案是一种在高通平台上验证 Golden Copy 的方法,该方案旨在确保 Golden Copy 的正确性和可靠性。下面是对 Golden Copy 验证方案的详细说明: 一、 目的 Golden Copy 验证方案的目的是为了确保在...

    iCopy解码软件

    本文将深入探讨iCopy解码软件的功能、使用方法以及其在实际工作中的应用。 首先,我们需要理解iCopy解码软件的核心功能。这款软件主要针对的是iCopy设备产生的数据,这些数据可能来自于扫描文档、图像捕获或其他...

    C#方法高效合并多个Excel表格,适用大数据量。

    综上所述,这个项目通过C#实现了对大数据量Excel表格的高效合并,可能的关键技术包括使用EPPlus库避免Interop接口,采用Copy方法的优化策略,以及利用内存管理、批处理和并发处理等手段提升性能。这为处理大量Excel...

    java实现的文件复制

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

    WM_COPYDATA使用方法

    本文将详细介绍WM_COPYDATA的使用方法,并通过两个实际示例——进程内部通信和进程间通信,展示其在传送结构体和JPG图片中的应用。 WM_COPYDATA消息是Windows API提供的一种轻量级的通信方式,它不需要创建额外的...

    c# 文件上传,文件COPY PDA 数据库 SQLSERVER

    例如,File.Copy方法可以实现文件的简单复制,而FileInfo对象则提供了更丰富的文件操作功能。在复制过程中,可能需要处理文件锁、权限等问题。 3. **PDA 数据库**: PDA设备通常使用SQLite或Microsoft SQL Server ...

    (完整word版)Excel-VBA把工作薄中的工作表拆分独立工作薄.doc

    该方法使用了 Application.FileDialog 对话框选择存放路径,Workbook.SaveAs 方法保存工作簿的更改,.Find 方法查找工作表中的外部引用,并将其转换为值,Sheets.Copy 方法将工作表复制到工作簿的另一位置,Shell ...

    编写一个java应用程序,将一个包含多个子目录和文件的目录复制到另外一个指定的目录下

    // 使用NIO的Files.copy方法,可以设置是否覆盖已存在的文件 Files.copy(srcFile.toPath(), destFile.toPath(), StandardCopyOption.REPLACE_EXISTING); System.out.println("文件 " + srcFile.getName() + " 已...

    关于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] ...

    Javascript 实现复制(Copy)动作方法大全

    ### Javascript 实现复制(Copy)动作方法大全知识点详解 #### 前言 随着互联网的发展,不同的浏览器种类越来越多,包括IE、Firefox、Chrome、Safari等。这使得在不兼容的浏览器之间实现特定功能变得复杂,尤其是像...

Global site tag (gtag.js) - Google Analytics