iOS 記憶體管理 自定義物件的拷貝

2021-08-07 23:49:17 字數 2595 閱讀 8862

//

聯絡人:

石虎暱稱

:嗡嘛呢叭咪哄

一、淺拷貝

首先建立

person.h

和person.m,

實現協議

#person.h

@inte***ce

person : nsobject

@property

(nonatomic,copy) nsstring *name;

@end

#person.m

@implementation

person

@synthesize

name;

//實現

copywithzone方法

- (id)copywithzone:(

nszone

*)zone

@end

二、測試淺拷貝

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

[person setname:

@"leo"];

nsarray

* arr1 = [[nsarray alloc] initwithobjects:person,

@"aa"

, @[

@"aa"

], [nsmutablearray arraywithobjects:

@"aa"

,nil

], nil];

nsarray

* arr2 = [[

nsarray

alloc

] initwitharray

:arr1];

nsarray

* arr3 = [[

nsarray

alloc

] initwitharray

:arr1

copyitems

: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:0x1004006b0

name:lily

p2:0x1004006b0

name:lily

p3:0x100404090

name:leo

謝謝!!!

ios深拷貝,淺拷貝,拷貝自定義物件的簡單介紹

copy語法的目的 改變副本的時候,不會影響到源物件 深拷貝 內容拷貝,會產生新的物件。新物件計數器置為1,源物件計數器不變。淺拷貝 指標拷貝,不會產生新的物件。源物件計數器 1。拷貝有下面兩個方法實現拷貝 id copy id mutablecopy 要實現copy,必須實現協議 陣列,字典,字串...

ios深拷貝,淺拷貝,拷貝自定義物件的簡單介紹

copy語法的目的 改變副本的時候,不會影響到源物件 深拷貝 內容拷貝,會產生新的物件。新物件計數器置為1,源物件計數器不變。淺拷貝 指標拷貝,不會產生新的物件。源物件計數器 1。拷貝有下面兩個方法實現拷貝 objc view plain copy id copy id mutablecopy 要實...

C 自定義記憶體 管理

工作中常常需要,將一些資料放到記憶體中處理,有時候資料量好大多達3g的空間。而且自己儲存都是一些指標之類的東西,每次都要new,容器中儲存的量好大,四五百萬個。而且最頭疼的就是 析構的時候要等好久才能釋放掉這個東西。查了好久 發現最流行的就是 空間換時間。說了也慚愧,在學校中沒怎麼學到高深的東西,好...