麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

iOS/Objective-C開發字典NSDictionary的深復制(使用category)

2019-11-14 20:03:39
字體:
來源:轉載
供稿:網友

目標:把NSDictionary對象轉換成NSMutableDictionary對象,對象內容是字符串數組,需要實現完全復制(深復制)。 

如果調用NSDictionary的mutableCopy方法,可以得到一個NSMutableDictionary對象,但這只是淺復制,如果我們修改NSDictionary中數組內的值(當然,數組必須是NSMutableArray),會發現,NSMutableDictionary對象內數組的值也跟著更改了。我們需要增加一個mutableDeepCopy方法來實現深復制,在該方法中,循環復制每一個元素。 

要實現這一功能,有兩種方法,一是繼承,二是使用category。category與繼承的區別在于,使用category并不是新建一個類,而是在原類的基礎上增加一些方法(使用的時候還是用原類名),這樣,我們就不需要修改已經在其他源文件中寫好的類名,只需要導入h頭文件,再把復制方法修改成我們新增的方法即可。 

一、新建Objective-C category文件,我這Category填MutableDeepCopy,Category on填NSDictionary,所以生成的文件是NSDictionary+MutableDeepCopy.h和NSDictionary+MutableDeepCopy.m,生成的文件名很容易理解。 

二、兩文件源代碼: 

NSDictionary+MutableDeepCopy.h 

C++代碼  收藏代碼
  1. #import <Foundation/Foundation.h>  
  2.    
  3. @interface NSDictionary (MutableDeepCopy)  
  4. -(NSMutableDictionary *)mutableDeepCopy;  
  5. //增加mutableDeepCopy方法  
  6. @end  


NSDictionary+MutableDeepCopy.m: 

C++代碼  收藏代碼
  1. #import "NSDictionary+MutableDeepCopy.h"  
  2.    
  3. @implementation NSDictionary (MutableDeepCopy)  
  4. -(NSMutableDictionary *)mutableDeepCopy  
  5. {  
  6.     NSMutableDictionary *dict=[[NSMutableDictionary alloc] initWithCapacity:[self count]];  
  7.     //新建一個NSMutableDictionary對象,大小為原NSDictionary對象的大小  
  8.     NSArray *keys=[self allKeys];  
  9.     for(id key in keys)  
  10.     {//循環讀取復制每一個元素  
  11.         id value=[self objectForKey:key];  
  12.         id copyValue;  
  13.         if ([value respondsToSelector:@selector(mutableDeepCopy)]) {  
  14.             //如果key對應的元素可以響應mutableDeepCopy方法(還是NSDictionary),調用mutableDeepCopy方法復制  
  15.             copyValue=[value mutableDeepCopy];  
  16.         }else if([value respondsToSelector:@selector(mutableCopy)])  
  17.         {  
  18.             copyValue=[value mutableCopy];  
  19.         }  
  20.         if(copyValue==nil)  
  21.             copyValue=[value copy];  
  22.         [dict setObject:copyValue forKey:key];  
  23.    
  24.     }  
  25.     return dict;  
  26. }  
  27. @end  

 

 

測試: 

 

 

C++代碼  收藏代碼
  1. #import <Foundation/Foundation.h>  
  2. #import "NSDictionary+MutableDeepCopy.h"  
  3. //導入頭文件  
  4. int main (int argc, const char * argv[])  
  5. {  
  6.    
  7.     @autoreleasepool {  
  8.         NSMutableArray *arr1=[[NSMutableArray alloc] initWithObjects:@"aa",@"bb",@"cc", nil];  
  9.         NSDictionary *dict1=[[NSDictionary alloc] initWithObjectsAndKeys:arr1,@"arr1", nil];  
  10.         NSLog(@"%@",dict1);  
  11.         NSMutableDictionary *dict2=[dict1 mutableCopy];  
  12.         //淺復制  
  13.         NSMutableDictionary *dict3=[dict1 mutableDeepCopy];  
  14.         //深復制  
  15.         [arr1 addObject:@"dd"];  
  16.         NSLog(@"%@",dict2);  
  17.         NSLog(@"%@",dict3);  
  18.    
  19.     }  
  20.     return 0;  
  21. }  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人福利电影在线观看 | 亚洲精品一区国产精品丝瓜 | 免费日本一区二区 | 暴力肉体进入hdxxxx古装 | 九九视频精品在线观看 | 91免费高清视频 | 蜜桃免费在线 | 美国av免费看 | 舌头伸进添的我好爽高潮网站 | 欧美成人精品一区二区三区 | 国产精品免费成人 | 中文有码一区二区 | 日韩毛片免费观看 | 久久精品国产精品亚洲 | 欧美日韩国产一区二区三区在线观看 | 久久经典国产视频 | 国产成人免费高清激情视频 | 久久久久久精 | 女人叉开腿让男人桶 | 青久草视频 | 黄色网欧美 | 日日做夜夜操 | 国产一区二区视频在线播放 | 成人午夜一区 | 中国fx性欧美xxxx | av免费片| 爱唯侦察 国产合集 亚洲 | 在线看一级片 | 精品国产一级毛片 | 暴力肉体进入hdxxxx古装 | 国产成人高清在线观看 | 毛片视频观看 | 精国品产一区二区三区有限公司 | 欧美日韩视频在线播放 | 国产成人自拍av | 性欧美性欧美 | chengrenzaixian| 中韩毛片 | 亚洲最大的成人网 | 国产精品久久久久久久久久 | 美女擦逼 |