iOS設計模式之原型模式

2021-09-23 21:21:11 字數 1918 閱讀 7768

說明 深複製和淺複製

指標只是儲存在記憶體中資源位址的佔位符。在複製操作中,如果只是將指標複製給新物件(副本),那麼底層的資源實際上仍然由兩個例項在共享。其實兩者指向的都是同一塊記憶體。這就是淺複製。

什麼是深複製呢?深複製是指不僅複製指標值,還複製指標所指向的資源。

cocoa touch框架為nsobject的派生類提供了實現深複製的協議。nsobject的子類需要實現nscopying協議以及其方法:

-(id)copywithzone:(nszone *)zone;
nsobject有乙個實列方法叫做-(id)copy。預設的copy方法呼叫[self copywithzone:nil];對於採納了nscopying協議的子類,需要實現這個方法,否則會引發異常。

prototype.h

//

// prototype.h

// test

//// created by zhanggui on 15/8/5.

//#import @inte***ce prototype : nsobject@property(nonatomic)nsstring *name;

@end

prototype.m

//

// prototype.m

// test

//// created by zhanggui on 15/8/5.

//#import "prototype.h"

@implementation prototype

//實現nscopying中的方法

-(id)copywithzone:(nszone *)zone

@end

然後在viewcontroller中呼叫。具體的viewdidload**如下:

- (void)viewdidload
執行結果如下:

2015-08-05 20:51:20.535 test[8763:3496263] prototyp addreess:0x7a3e35a0

2015-08-05 20:51:20.536 test[8763:3496263] deepaddress:0x7a3e4650

2015-08-05 20:51:20.536 test[8763:3496263] shallowaddress:0x7a3e35a0

2015-08-05 20:51:20.536 test[8763:3496263] prototype:originname

2015-08-05 20:51:20.536 test[8763:3496263] deep:(null)

2015-08-05 20:51:20.536 test[8763:3496263] shallow:originname

2015-08-05 20:51:20.536 test[8763:3496263] changed.........

2015-08-05 20:51:20.536 test[8763:3496263] prototype:newname

2015-08-05 20:51:20.536 test[8763:3496263] deep:(null)

2015-08-05 20:51:20.536 test[8763:3496263] shallow:newname

結論:

iOS設計模式 原型模式

使用原型例項指定建立物件的種類,並通過複製這個原型建立新的物件 它通過複製乙個已經存在的例項來返回新的例項,而不是新建例項 原型模式實際意義上來說是拷貝 而且一般情況下都是深拷貝。簡單理解就是 建立第乙個模板物件,然後通過複製模板來建立新的物件 遵守協議 實現 id copywithzone nsz...

設計模式之原型模式

原型模式其實就是從乙個物件再建立乙個可定製的物件,而且不需要知道建立的細節。具體就是說通過複製或者轉殖乙個原型物件產生新的物件 轉殖物件 分為兩種 深複製或者淺複製,這兩種的主要區別是 在原型中如果有物件的引用,淺複製是將引用複製過來了,也就是淺複製和原型中的物件的引用相同,而深複製是將轉殖物件中引...

設計模式之原型模式

include include 此練習為原型模式方法的練習 原型模式揭示了在同一原型上可以通過複製使得 只需要例項化一次,再通過相應的類函式操作可以得到 同一原型下的不同的版本物件 此練習將考慮在實際開發中 比如 工作經歷也是作為乙個類被含在簡歷類中的情況 這情況將涉及到類的引用和深 淺複製 原型基...