黑马程序员——OC学习笔记—— Copy

黑马程序员——OC学习笔记—— Copy

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

copy 即对象拷贝

要使用对象数据而不希望修改对象时,可以使用copy

copy叫做浅拷贝  mutablecopy深拷贝

copy需要遵守NSCopying协议,实现CopywithZone方法

MutableCopy也一样要遵守相应协议

注意:

OC中copy复制的对象都是不可变的  mutablecopy复制的是可变副本

浅拷贝:只拷贝地址,不拷贝空间 是同一个对象,源对象和副本对象引用计数加1,相当于retain一次,所以在手动管理内存是要注意release一次

深拷贝:开辟新的空间存储副本对象,源对象的引用计数不变,副本对象引用计数都为1;

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Dog *d=[Dog new];
        d.age=20;
        d.tel=4100;
        Dog *d2=[d copy];
        NSLog(@"%d %d",d2.age,d2.tel);

        NSString *[email protected]"abc";
        NSMutableString *str2=[str mutableCopy];
        [str2 appendString:@"xxxxx"];
        NSLog(@"str2=%@",str2);
    }
    return 0;
}

  

实现Copying协议 重写方法

- (id)copyWithZone:(NSZone *)zone

@implementation Dog
- (id)copyWithZone:(NSZone *)zone{

    //为了让创建的两个对象copy使用不同的空间 要重新分配空间
    Dog *d=[[Dog alloc]init];

    d.age=self.age;
    d.tel=self.tel;

    return d;
    //注意此处不能返回return self不让两个对象用的是一块空间发生改变会影响对方

}
@end

  

时间: 2024-10-13 12:18:23

黑马程序员——OC学习笔记—— Copy的相关文章

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员-OC学习笔记之NSString与NSMutableString

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSString与NSMutableString 相信大家对NSString类都不陌生,它是OC中提供的字符串类,它的对象中的字符串都是不可变的,而它的子类NSMutableString类的对象中的字符串就是可变的.什么是可变与不可变呢?二者的区别就是在已经创建的一个字符串对象中,在程序中能不能更改字符串,比如拼接新的字符串,可变的可以在原字符串中更改,

黑马程序员-OC学习笔记之Foundatio框架集合类

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.OC数组 OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray. 1?不可变数组的创建 // 创建一个不可变数组,元素为一个OC字符串对象 @"小桥" NSArray *array1 = [NSArray arrayWithObject:@"小桥"]; // 创建一个不可变数组,元素为多个O

黑马程序员-OC学习笔记之autorelease与自动释放池

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.autorelease autorelease与release相似,是OC中的一个对象方法.这两个方法都能把对象的引用计数器减1,但是release是一个精确的减1,对对象的操作只能在release之前进行,如果是在之后,就会出现野指针错误:而autorelease是一个不精确的引用计数器减1,当给对象发送autorelease消息时,对象就会被放到自动

黑马程序员——OC学习总结--copy用法

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- copy的使用 copy 和 mutableCopy 当一个对象 使用  copy 和 mutableCopy 方法可以创建对象的副本 copy 需实现NSCopying协议 创建不可变副本 mutableCopy 需实现NSMutableCopying协议 创建不可变副本 深拷贝: 内容拷贝  源对象和副本指向不同的两个对象,源对象引用计数器不变,副本计数器设置为1 浅拷贝 :指针拷贝  源

黑马程序员_OC学习笔记之Foundation框架集合类

OC--集合类 1.OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等 2.OC数组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加* 3.NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变 4.NSArray数组和子类NSMutableArray的基本操作: 1>使用NS

黑马程序员-C学习笔记之scanf

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.scanf函数介绍 这也是在stdio.h中声明的一个函数,因此使用前必须加入#include<stdio.h>.调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量. 函数原型为:int scanf(const char*format,...); 二.scanf用