NSMapTable кажется гораздо более мощным и гибким родственником NSMutableDictionary. Его можно настроить для работы в NSMutableDictionary (для копирования ключей и сохранения строгой ссылки на значение). В каких случаях мне не следует использовать NSMapTable?
Когда использовать NSMutableDictionary вместо NSMapTable?
comment
В основном, есть гораздо больше способов выстрелить себе в ногу с NSMapTable, и это ненужная сложность для 99,9% применений.
- person Hot Licks   schedule 07.05.2014
comment
Кроме того, не ясно, совместим ли NSMapTable с NSMutableDictionary, поэтому вы, вероятно, не сможете использовать его во многих случаях и будете постоянно переключаться туда и обратно.
- person Hot Licks   schedule 07.05.2014
comment
У Мэтта Томпсона (из NSHipster) есть хорошая статья об этом здесь
- person Alladinian   schedule 08.05.2014
comment
@HotLicks Как выстрелить себе в ногу с помощью NSMapTable?
- person Boon   schedule 09.05.2014
Ответы (2)
Я предпочту NSDictionary
(и NSSet
) в 99% случаев. Большая абстракция означает только большую сложность и больше способов совершить ошибку.
Я бы использовал NSMapTable
(и NSHashTable
) только в одном случае - для хранения слабых ссылок. Я не вижу для них другого полезного применения.
person
Sulthan
schedule
07.05.2014
@Бун Обычный
CFDictionary
. Цитата из NSMapTable
docs: ...обычно рекомендуется использовать API функций C для указателей void *... Или я просто оберну его в NSValue
.
- person Sulthan; 07.05.2014
Имейте в виду, что NSMapTable иногда не освобождает ключи и объекты, если используются слабые-слабые, слабые-сильные или сильные-слабые привязки http://cocoamine.net/blog/2013/12/13/nsmaptable-and-обнуление-слабых-ссылок/.
Также в NSMapTable.h вы можете обнаружить, что 'записи не обязательно удаляются сразу после восстановления слабого ключа':
+ (id)weakToStrongObjectsMapTable NS_AVAILABLE(10_8, 6_0);
// entries are not necessarily purged right away when the weak key is reclaimed
+ (id)weakToWeakObjectsMapTable NS_AVAILABLE(10_8, 6_0);
// entries are not necessarily purged right away when the weak key or object is reclaimed
person
Avt
schedule
16.09.2014