NSMapTable
類似于字典的集合,但具有更廣泛的可用內存語義;繼承自NSObject;NSMapTable具有以下特點:
- 與NSDictionary一樣,以鍵值對的方式存儲內容;
- key 可以不用遵循 NSCopying 協議;
- key 和 value 的內存管理方式可以分開,如:key 是強引用,value 是弱引用;
創(chuàng)建和初始化
// 根據選項返回映射表
NSMapTable *mapTable = [[NSMapTable alloc]initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsStrongMemory capacity:5];
NSPointerFunctions *functions = [[NSPointerFunctions alloc]initWithOptions:NSPointerFunctionsStrongMemory];
// 根據方法返回映射表
NSMapTable *mapTable1 = [[NSMapTable alloc]initWithKeyPointerFunctions:functions valuePointerFunctions:functions capacity:5];
// 創(chuàng)建對鍵和值的強引用的映射表
NSMapTable *mapTable2 = [NSMapTable strongToWeakObjectsMapTable];
// 創(chuàng)建對鍵的強引用和值的弱引用的映射表
NSMapTable *mapTable3 = [NSMapTable strongToWeakObjectsMapTable];
// 創(chuàng)建對鍵和值的弱引用的映射表
NSMapTable *mapTable4 = [NSMapTable weakToWeakObjectsMapTable];
// 創(chuàng)建對鍵的弱引用和值的強引用的映射表
NSMapTable *mapTable5 = [NSMapTable weakToStrongObjectsMapTable];
操作內容
NSMapTable *mapTable = [NSMapTable strongToWeakObjectsMapTable];
// 將指定的鍵值對添加到映射表中
[mapTable setObject:@"obj0" forKey:@"key0"];//key0 -> obj0
// 從映射表中刪除指定的鍵及其關聯值
[mapTable removeObjectForKey:@"key0"];//{}
// 清空映射表中的鍵值對
[mapTable removeAllObjects];//{}
訪問內容
NSMapTable *mapTable = [NSMapTable strongToWeakObjectsMapTable];
// 將指定的鍵值對添加到映射表中
[mapTable setObject:@"obj0" forKey:@"key0"];//key0 -> obj0
[mapTable setObject:@"obj1" forKey:@"key1"];//key1 -> obj1
// 獲取指定鍵的關聯值
NSString *obj = [mapTable objectForKey:@"key0"];//obj0
// 獲取映射表中鍵值對的數量
NSUInteger count = [mapTable count];//obj0
// 根據枚舉器遍歷鍵
NSEnumerator *enumerator = [mapTable keyEnumerator];
id object;
while (object = [enumerator nextObject]) {
NSLog(@"開始打?。?@\n",object);
/*
開始打?。簁ey0
開始打?。簁ey1
*/
}
// 根據枚舉器遍歷值
NSEnumerator *enumerator1 = [mapTable objectEnumerator];
id object1;
while (object1 = [enumerator1 nextObject]) {
NSLog(@"開始打?。?@\n",object1);
/*
開始打印:obj0
開始打?。簅bj1
*/
}
映射表轉字典
NSDictionary *dict = [mapTable dictionaryRepresentation];
優(yōu)秀文章