CCDictionary
/**
* CCDictionary is a class like NSDictionary in Obj-C .
*
* @note Only the pointer of CCObject or its subclass can be inserted to CCDictionary.
* @code
* // Create a dictionary, return an autorelease object.
* CCDictionary* pDict = CCDictionary::create();
*
* // Insert objects to dictionary
* CCString* pValue1 = CCString::create("100");
* CCString* pValue2 = CCString::create("120");
* CCInteger* pValue3 = CCInteger::create(200);
* pDict->setObject(pValue1, "key1");
* pDict->setObject(pValue2, "key2");
* pDict->setObject(pValue3, "key3");
*
* // Get the object for key
* CCString* pStr1 = (CCString*)pDict->objectForKey("key1");
* CCLog("{ key1: %s }", pStr1->getCString());
* CCInteger* pInteger = (CCInteger*)pDict->objectForKey("key3");
* CCLog("{ key3: %d }", pInteger->getValue());
* @endcode
*
*/ class CC_DLL CCDictionary : public CCObject
{
public:
/**
* The constructor of CCDictionary.
*/
CCDictionary(); /**
* The destructor of CCDictionary
*/
~CCDictionary(); /**
* Get the count of elements in CCDictionary.
*
* @return The count of elements.
*/
unsigned int count(); /**
* Return all keys of elements.
*
* @return The array contains all keys of elements. It's an autorelease object yet.
*/
CCArray* allKeys(); /**
* Get all keys according to the specified object.
* @warning We use '==' to compare two objects
* @return The array contains all keys for the specified object. It's an autorelease object yet.
*/
CCArray* allKeysForObject(CCObject* object); /**
* Get the object according to the specified string key.
*
* @note The dictionary needs to use string as key. If integer is passed, an assert will appear.
* @param key The string key for searching.
* @return The object matches the key. You need to force convert it to the type you know.
* @code
* // Assume that the elements are CCString* pointers. Convert it by following code.
* CCString* pStr = (CCString*)pDict->objectForKey("key1");
* // Do something about pStr.
* // If you don't know the object type, properly you need to use dynamic_cast<SomeType*> to check it.
* CCString* pStr2 = dynamic_cast<CCString*>(pDict->objectForKey("key1"));
* if (pStr2 != NULL) {
* // Do something about pStr2
* }
* @endcode
* @see objectForKey(intptr_t)
*/
CCObject* objectForKey(const std::string& key); /**
* Get the object according to the specified integer key.
*
* @note The dictionary needs to use integer as key. If string is passed, an assert will appear.
* @param key The integer key for searching.
* @return The object matches the key.
* @see objectForKey(const std::string&)
*/
CCObject* objectForKey(intptr_t key); /** Get the value according to the specified string key.
*
* @note Be careful to use this function since it assumes the objects in the dictionary are CCString pointer.
* @param key The string key for searching
* @return An instance of CCString.
* It will return an empty string if the objects aren't CCString pointer or the key wasn't found.
* @see valueForKey(intptr_t)
*/
const CCString* valueForKey(const std::string& key); /** Get the value according to the specified integer key.
*
* @note Be careful to use this function since it assumes the objects in the dictionary are CCString pointer.
* @param key The string key for searching.
* @return An instance of CCString.
* It will return an empty string if the objects aren't CCString pointer or the key wasn't found.
* @see valueForKey(intptr_t)
*/
const CCString* valueForKey(intptr_t key); /** Insert an object to dictionary, and match it with the specified string key.
*
* @note Whe the first time this method is invoked, the key type will be set to string.
* After that you can't setObject with an integer key.
* If the dictionary contains the key you passed, the object matching the key will be released and removed from dictionary.
* Then the new object will be inserted after that.
*
* @param pObject The Object to be inserted.
* @param key The string key for searching.
* @see setObject(CCObject*, intptr_t)
*/
void setObject(CCObject* pObject, const std::string& key); /** Insert an object to dictionary, and match it with the specified string key.
*
* @note Then the first time this method is invoked, the key type will be set to string.
* After that you can't setObject with an integer key.
* If the dictionary contains the key you passed, the object matching the key will be released and removed from dictionary.
* Then the new object will be inserted after that.
* @param pObject The Object to be inserted.
* @param key The string key for searching.
* @see setObject(CCObject*, const std::string&)
*/
void setObject(CCObject* pObject, intptr_t key); /**
* Remove an object by the specified string key.
*
* @param key The string key for searching.
* @see removeObjectForKey(intptr_t), removeObjectsForKeys(CCArray*),
* removeObjectForElememt(CCDictElement*), removeAllObjects().
*/
void removeObjectForKey(const std::string& key); /**
* Remove an object by the specified integer key.
*
* @param key The integer key for searching.
* @see removeObjectForKey(const std::string&), removeObjectsForKeys(CCArray*),
* removeObjectForElememt(CCDictElement*), removeAllObjects().
*/
void removeObjectForKey(intptr_t key); /**
* Remove objects by an array of keys.
*
* @param pKeyArray The array contains keys to be removed.
* @see removeObjectForKey(const std::string&), removeObjectForKey(intptr_t),
* removeObjectForElememt(CCDictElement*), removeAllObjects().
*/
void removeObjectsForKeys(CCArray* pKeyArray); /**
* Remove an object by an element.
*
* @param pElement The element need to be removed.
* @see removeObjectForKey(const std::string&), removeObjectForKey(intptr_t),
* removeObjectsForKeys(CCArray*), removeAllObjects().
*/
void removeObjectForElememt(CCDictElement* pElement); /**
* Remove all objects in the dictionary.
*
* @see removeObjectForKey(const std::string&), removeObjectForKey(intptr_t),
* removeObjectsForKeys(CCArray*), removeObjectForElememt(CCDictElement*).
*/
void removeAllObjects(); /// @{
/// @name Function override
/**
* This function is used for deepcopy elements from source dictionary to destination dictionary.
* You shouldn't invoke this function manually since it's called by CCObject::copy.
*/
virtual CCObject* copyWithZone(CCZone* pZone);
/// @} /**
* Return a random object in the dictionary.
*
* @return The random object.
* @see objectForKey(intptr_t), objectForKey(const std::string&)
*/
CCObject* randomObject(); /**
* Create a dictionary.
* @return A dictionary which is an autorelease object.
* @see createWithDictionary(CCDictionary*), createWithContentsOfFile(const char*), createWithContentsOfFileThreadSafe(const char*).
*/
static CCDictionary* create(); /**
* Create a dictionary with an existing dictionary.
*
* @param srcDict The exist dictionary.
* @return A dictionary which is an autorelease object.
* @see create(), createWithContentsOfFile(const char*), createWithContentsOfFileThreadSafe(const char*).
*/
static CCDictionary* createWithDictionary(CCDictionary* srcDict); /**
* Create a dictionary with a plist file.
* @param pFileName The name of the plist file.
* @return A dictionary which is an autorelease object.
* @see create(), createWithDictionary(CCDictionary*), createWithContentsOfFileThreadSafe(const char*).
*/
static CCDictionary* createWithContentsOfFile(const char *pFileName); /**
* Create a dictionary with a plist file.
*
* @note the return object isn't an autorelease object.
* This can make sure not using autorelease pool in a new thread.
* Therefore, you need to manage the lifecycle of the return object.
* It means that when you don't need it, CC_SAFE_RELEASE needs to be invoked.
*
* @param pFileName The name of the plist file.
* @return A dictionary which isn't an autorelease object.
*/
static CCDictionary* createWithContentsOfFileThreadSafe(const char *pFileName); private:
/**
* For internal usage, invoked by setObject.
*/
void setObjectUnSafe(CCObject* pObject, const std::string& key);
void setObjectUnSafe(CCObject* pObject, const intptr_t key); public:
/**
* All the elements in dictionary.
*
* @note For internal usage, we need to declare this member variable as public since it's used in UT_HASH.
*/
CCDictElement* m_pElements;
private: /** The support type of dictionary, it's confirmed when setObject is invoked. */
enum CCDictType
{
kCCDictUnknown = ,
kCCDictStr,
kCCDictInt
}; /**
* The type of dictionary, it's assigned to kCCDictUnknown by default.
*/
CCDictType m_eDictType;
};
CCDictionary的更多相关文章
- cocos2d CCDictionary
CCDictionary* dict=CCDictionary::create(); CCString* str1=CCString::create("); CCString* str2=C ...
- CCDictionary&CCArray执行retain()重要点
CCDictionary也需要执行retain(),否则则跟CCArray,返回则释放对象. 在Lua中,忘记了retain(),导致一些出现gCCDictionary:objectForKey(ke ...
- 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml
数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...
- CCDictionary(转)
#ifndef __CCDICTIONARY_H__ #define __CCDICTIONARY_H__ //需要哈希表的支持 #include "support/data_support ...
- cocos2d-x3.0 用CCDictionary写文件
bool CDownLoad_LocalData::WriteToConfigFile( DownLoadLocalData* downdata ){ CCDictionary* pDict = CC ...
- CCDictionary 用调试器查看问题
if(dic->objectForKey("uid")) uid = dic->valueForKey("uid")->getCString( ...
- !cocos2d ccdictionary->retain()的问题
我再a类当中生命了一个dict,将它带入到b类当中,但没有在b类初始化时retain,于是在update当中找不到了.啃爹不.记得retain()
- 【Cocos2d-x for WP8 学习整理】(5)文字显示全整理
学习 Cocos2d-x 有一阵了,现在要做个小东西,第一步就遇到了文字展示的问题,于是想把可能遇到的问题统统整理一下.这一部分也不局限于wp8,全平台应该都是一个解决方案. 先在脑袋里大致想了一下, ...
- [原创]cocos2d-x研习录-第三阶 特性之瓦片地图集
由于一张大的世界地图或背景图片往往可以由屈指可数的几种地形来表示,每种地形对应于一张小的图片,我们称这些小的地形图片为瓦片.把这些瓦片拼接在一起,组合成一个完整的地图,这就是瓦片地图集的基本原理. C ...
随机推荐
- Linux(centos6.5)下安装jenkins
Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎. 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插件, 对于我来说,也是应用在系统部署上. 废话不多说,直接进入我们的安 ...
- kibana对logstash监控获取不到数据
需求: kibana监控elasticsearch+kibana+logstash的性能寻找,性能瓶颈! 发现启动logstash加载logstash.yml,不读取配置好的xpack.monitor ...
- Javascript 思维导图 绘制基础内容(值得一看)
来源于:http://www.cnblogs.com/coco1s/p/3953653.html javascript变量 javascript运算符 javascript数组 javascript流 ...
- Linux-TCP 出现 RST 的几种情况
导致“Connection reset”的原因是服务器端因为某种原因关闭了Connection,而客户端依然在读写数据,此时服务器会返回复位标志“RST”,然后此时客户端就会提示“java.net.S ...
- 推荐系统排序(Ranking)评价指标
一.准确率(Precision)和召回率(Recall) (令R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表.) 对用户u推荐N个物品(记为R(u) ...
- 算法中的 log 到底是什么?
之前一直不解为何算法中经常会看到 log 今天看<数据结构与算法分析 Java 语言描述>(第 3 版)2.4.3 节 求最大子序列和的分治算法实现时才注意到原因 翻看第 29 页的最后一 ...
- 环信EaseUI集成错误 Unknown type name 'NSString' NSLocalizedString
环信集成本来认为很简单的,有现成的UI,照着文档直接傻瓜操作就行,没曾想聊天记录不能长时间保存,于是乎就有了这篇记录环信坑的笔记 在下载的环信的SDK时候里面会有两个包,一个完整版的,一个简洁版的,导 ...
- IDEA使用笔记(五)——*.properties中文乱码的修正
问题:我的IDEA已经将文件的字符集设置成了UTF-8,但是中文在*.properties文件中还是会出现乱码,后来经同事指点修改了一项配置就ok了!话不多说,看下面的对比就清楚了. 设置前: 设置后 ...
- win7怎么快速截取图片
点击开始--运行或者winkey + r 键直接进入运行. 2 在输入框输入snippingtool,点击确定. 3 这就找到截图工具,如图. END 方法/步骤2 进入c盘--Windows-- ...
- AaronYang的留言板
^_^很开心能在这里遇到你,我是ay,英文名叫aaronyang,真名叫杨洋,安徽六安的,有老乡吗?这里的文章几乎都是我原创的,要不然就是收集别人的好的文章,自己再整理下与大家分享.绝对希望原创,本站 ...