美文网首页ios开发进阶iOS学习程序员
iOS 内存管理~自定义对象的拷贝

iOS 内存管理~自定义对象的拷贝

作者: 石虎132 | 来源:发表于2017-09-09 21:54 被阅读136次

//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄

一、浅拷贝

首先创建Person.h和Person.m,实现协议

#Person.h

@interfacePerson : NSObject

@property(nonatomic,copy) NSString *name;

@end

#Person.m

@implementationPerson

@synthesizename;

//实现copyWithZone方法

- (id)copyWithZone:(NSZone*)zone {

Person*p = [[selfclass] allocWithZone:zone];

p.name = [selfname];

return p;

}

@end

二、测试浅拷贝

Person* person = [[Person alloc] init];

[person setName:@"leo"];

NSArray* arr1 = [[NSArray alloc] initWithObjects:person,@"AA",@[@"AA"], [NSMutableArray arrayWithObjects:@"AA",nil],nil];

NSArray* arr2 = [[NSArrayalloc]initWithArray:arr1];

NSArray* arr3 = [[NSArrayalloc]initWithArray:arr1copyItems:YES];

[person setName:@"lily"];

//尝试更改name的值

//获取两个数组里的各自Person对象

Person* p1 = [arr1 objectAtIndex:0];

Person* p2 = [arr2 objectAtIndex:0];

Person* p3 = [arr3 objectAtIndex:0];

NSLog(@"arr1 :%p非集合:%p不可变集合:%p可变集合:%p", arr1, arr1[1], arr1[2], arr1[3]);

NSLog(@"arr2 :%p非集合:%p不可变集合:%p可变集合:%p", arr2, arr2[1], arr2[2], arr2[3]);

NSLog(@"arr3 :%p非集合:%p不可变集合:%p可变集合:%p", arr3, arr3[1], arr3[2], arr3[3]);

NSLog(@"p1:%p  name:%@", p1, p1.name);

NSLog(@"p2:%p  name:%@", p2, p2.name);

NSLog(@"p3:%p  name:%@", p3, p3.name);

arr1 :0x100404520非集合:0x100002090不可变集合:0x1004040a0可变集合:0x100404230

arr2 :0x100404630非集合:0x100002090不可变集合:0x1004040a0可变集合:0x100404230

arr3 :0x100404790非集合:0x100002090不可变集合:0x1004040a0可变集合:0x100404780

p1:0x1004006b0name:lily

p2:0x1004006b0name:lily

p3:0x100404090name:leo

谢谢!!!

相关文章

  • 浅拷贝与深拷贝

    写在前面 浅拷贝:指向对象所在内存指针的拷贝,对象所在内存不变 深拷贝:对象所在内存重新拷贝一份 在 iOS 中,...

  • iOS 内存管理~自定义对象的拷贝

    //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄 一、浅拷贝 首先创建Person.h和Person...

  • 深拷贝浅拷贝

    参考链接: ios深拷贝,浅拷贝,拷贝自定义对象的简单介绍 - daiyelang的专栏 - 博客频...

  • iOS之深拷贝与浅拷贝

    深拷贝与浅拷贝是在内存管理中非常重要的概念,理解好深拷贝和浅拷贝也有助于加深对iOS的内存管理的理解。 深拷贝与浅...

  • oc 浅拷贝与深拷贝

    1. 先说结论: 分可变对象、不可变对象、自定义对象、容器对象几种: 例子参考: iOS开发——深拷贝与浅拷贝详...

  • 内存管理:不看白不看,看了就是赚

    一、iOS的内存管理方式 1、小对象的内存管理 -- Tagged Pointer 2、普通对象的内存管理 -- ...

  • IOS

    一、IOS基础 1、浅拷贝与深拷贝浅拷贝:拷贝对象的指针成员变量和原对象的指针成员变量指向同一块内存空间。深拷贝:...

  • ios 了解深拷贝和浅拷贝

    iOS 了解深拷贝和浅拷贝 一、概念与总结 1、浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一...

  • iOS之从MRC到ARC内存管理详解

    概述 在iOS中开发中,我们或多或少都听说过内存管理。iOS的内存管理一般指的是OC对象的内存管理,因为OC对象分...

  • iOS 可变拷贝VS不可变拷贝

    iOS 可变拷贝VS不可变拷贝 概念 我们先来了解两个概念 深拷贝deep copy: 直接拷贝整个对象内存到另一...

网友评论

    本文标题:iOS 内存管理~自定义对象的拷贝

    本文链接:https://www.haomeiwen.com/subject/lgbajxtx.html