青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

專職C++

不能停止的腳步

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

常用鏈接

留言簿(28)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

本文地址:http://m.shnenglu.com/zdhsoft/archive/2014/09/03/208216.html
本文基于cocos2dx 3.2
cocos2dx 提供了一個基于xml的用戶數據存貯類,給基于cocos2dx開發的用戶數據存貯,這個類名就是UserDefault,在cocos2dx 2.x中是CCUserDefault。我的程序用的就是這個,但是最近老出錯,于是分析源代碼,發現了一個讓我震驚的東西。經過分析,發現用UserDefault每讀寫一次數據,都會創建一個tinyxml對象,然后讀取xml內容。如果是寫數據,還是寫入xml一次。下面是對應的代碼:
讀取key,所以各種讀取key的操作,都是類似這樣。
double UserDefault::getDoubleForKey(const char* pKey, double defaultValue)
{
    const char* value = nullptr;
    tinyxml2::XMLElement* rootNode;
    tinyxml2::XMLDocument* doc;
    tinyxml2::XMLElement* node;
    node =  getXMLNodeForKey(pKey, &rootNode, &doc);
    // find the node
    if (node && node->FirstChild())
    {
        value = (const char*)(node->FirstChild()->Value());
    }

    double ret = defaultValue;

    if (value)
    {
        ret = utils::atof(value);
    }

    if (doc) delete doc;

    return ret;
}
 關于getXMLNodeForKey的實現
/**
 * define the functions here because we don't want to
 * export xmlNodePtr and other types in "CCUserDefault.h"
 
*/

static tinyxml2::XMLElement* getXMLNodeForKey(const char* pKey, tinyxml2::XMLElement** rootNode, tinyxml2::XMLDocument **doc)
{
    tinyxml2::XMLElement* curNode = nullptr;

    // check the key value
    if (! pKey)
    {
        return nullptr;
    }

    do 
    {
         tinyxml2::XMLDocument* xmlDoc = new tinyxml2::XMLDocument();
        *doc = xmlDoc;

        std::string xmlBuffer = FileUtils::getInstance()->getStringFromFile(UserDefault::getInstance()->getXMLFilePath());

        if (xmlBuffer.empty())
        {
            CCLOG("can not read xml file");
            break;
        }
        xmlDoc->Parse(xmlBuffer.c_str(), xmlBuffer.size());

        // get root node
        *rootNode = xmlDoc->RootElement();
        if (nullptr == *rootNode)
        {
            CCLOG("read root node error");
            break;
        }
        // find the node
        curNode = (*rootNode)->FirstChildElement();
        while (nullptr != curNode)
        {
            const char* nodeName = curNode->Value();
            if (!strcmp(nodeName, pKey))
            {
                break;
            }

            curNode = curNode->NextSiblingElement();
        }
    } while (0);

    return curNode;
}
關于setValueForKey的實現
static void setValueForKey(const char* pKey, const char* pValue)
{
     tinyxml2::XMLElement* rootNode;
    tinyxml2::XMLDocument* doc;
    tinyxml2::XMLElement* node;
    // check the params
    if (! pKey || ! pValue)
    {
        return;
    }
    // find the node
    node = getXMLNodeForKey(pKey, &rootNode, &doc);
    // if node exist, change the content
    if (node)
    {
        if (node->FirstChild())
        {
            node->FirstChild()->SetValue(pValue);
        }
        else
        {
            tinyxml2::XMLText* content = doc->NewText(pValue);
            node->LinkEndChild(content);
        }
    }
    else
    {
        if (rootNode)
        {
            tinyxml2::XMLElement* tmpNode = doc->NewElement(pKey);//new tinyxml2::XMLElement(pKey);
            rootNode->LinkEndChild(tmpNode);
            tinyxml2::XMLText* content = doc->NewText(pValue);//new tinyxml2::XMLText(pValue);
            tmpNode->LinkEndChild(content);
        }    
    }

    // save file and free doc
    if (doc)
    {
        doc->SaveFile(UserDefault::getInstance()->getXMLFilePath().c_str());
        delete doc;
    }
}
它的flush方法也有驚人的發現:
void UserDefault::flush()
{
}
它是一個空函數,也就是說,你在寫入數據的時候,會以為最后會通過flush才會寫入數據,沒想全錯了!
如果你用它存貯比較多的字段時,你就會現,你悲劇了。
幸好發現及時,這里不建議大家使用UserDefault做為你的數據存貯。
可以可以用自定義的方式文件讀寫
如可以通過標準的C讀寫 fopen,fwrite等或iostream也都可以,重點是讀寫的文件路徑,會有所不同,下面是得到文件路徑的例子
std::string strFullFileName = FileUtils::getInstance()->getWritablePath() + DATA_FILE_NAME;

最后:不要求寫太高質量的代碼,但也不要寫的太低質量了
posted on 2014-09-03 10:23 冬瓜 閱讀(7183) 評論(0)  編輯 收藏 引用 所屬分類: cocos2dx
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区=区| 一区二区三区在线观看国产| 香蕉久久夜色精品国产| 这里只有精品视频在线| 亚洲午夜精品一区二区三区他趣| 日韩图片一区| 亚洲一区二区高清| 欧美一级在线亚洲天堂| 久久久久久国产精品一区| 蜜桃精品久久久久久久免费影院| 女主播福利一区| 国产精品啊啊啊| 韩国成人福利片在线播放| 亚洲第一中文字幕| 亚洲免费在线观看| 免费毛片一区二区三区久久久| 91久久极品少妇xxxxⅹ软件| 亚洲最黄网站| 久久一区中文字幕| 国产精品a久久久久久| 国产日韩欧美综合精品| 亚洲国产专区校园欧美| 亚洲影院高清在线| 美脚丝袜一区二区三区在线观看| 日韩视频久久| 久久久久久亚洲精品不卡4k岛国| 欧美精品亚洲| 一区二区三区无毛| 久久精品官网| 夜夜嗨av色一区二区不卡| 久久综合色播五月| 国产日韩欧美在线播放不卡| 一区二区三区精品视频| 美女主播一区| 欧美在线观看一区二区| 欧美三区免费完整视频在线观看| 亚洲国产欧美不卡在线观看| 久久激五月天综合精品| 一区二区日韩| 欧美久久久久中文字幕| 亚洲第一福利社区| 久久精品天堂| 亚洲欧美一区二区三区久久| 欧美另类一区| 一区二区电影免费观看| 欧美激情国产精品| 毛片一区二区| 欧美日韩精品欧美日韩精品 | 久久人91精品久久久久久不卡 | 久久久久久九九九九| 国产精品久久毛片a| 亚洲美女视频在线观看| 欧美肥婆bbw| 猫咪成人在线观看| 亚洲第一天堂无码专区| 久久久久天天天天| 欧美在线视频二区| 国内自拍一区| 久久综合久久综合九色| 久久久噜噜噜久久中文字免| 国产专区欧美精品| 久久久久欧美精品| 麻豆国产精品一区二区三区 | 亚洲免费在线电影| 国产精品私拍pans大尺度在线| 亚洲制服欧美中文字幕中文字幕| 99国产精品| 国产精品日韩在线| 久久久久国产精品午夜一区| 欧美主播一区二区三区| 国产真实久久| 亚洲成人中文| 欧美xx视频| 亚洲一卡久久| 午夜精品福利一区二区三区av | 欧美一区二区视频观看视频| 亚洲深爱激情| 国产视频一区二区在线观看| 美女露胸一区二区三区| 欧美成人精品| 亚洲欧美在线一区| 久久gogo国模啪啪人体图| 樱花yy私人影院亚洲| 亚洲国产中文字幕在线观看| 欧美色123| 久久久久久9999| 欧美二区在线看| 亚洲男人的天堂在线观看| 久久国产福利| 亚洲精品国产系列| 亚洲免费在线| 日韩视频免费在线观看| 午夜在线视频观看日韩17c| 狠狠综合久久| 一区二区三区日韩欧美| 尤物在线观看一区| 一区二区三区精品视频| 久久福利视频导航| 国产日韩精品视频一区二区三区| 欧美大片免费观看| 国产精品草草| 亚洲第一毛片| 国产亚洲毛片| 一区二区高清视频在线观看| 精品成人在线视频| 亚洲在线中文字幕| 日韩午夜av电影| 久久久久看片| 欧美资源在线| 欧美天天在线| 亚洲国产欧美一区| 韩日欧美一区二区三区| 亚洲一区二区四区| 一本一本久久a久久精品综合妖精| 欧美亚洲三级| 小黄鸭精品密入口导航| 欧美日韩精品福利| 亚洲电影在线看| 亚洲高清中文字幕| 久久国产99| 久久久久久综合| 国产亚洲日本欧美韩国| 亚洲欧美成人| 西西人体一区二区| 国产精品国内视频| 一本久久a久久免费精品不卡| 亚洲日本一区二区三区| 麻豆av福利av久久av| 免费日韩成人| 亚洲国产高清一区二区三区| 久久久久国产成人精品亚洲午夜| 久久精品夜色噜噜亚洲a∨| 国产精品亚洲аv天堂网| 亚洲视频一区二区| 亚洲欧美一区二区三区极速播放| 欧美日韩亚洲视频一区| 亚洲精品女人| 91久久综合亚洲鲁鲁五月天| 美女主播一区| 亚洲激情在线| 在线亚洲欧美视频| 国产精品久久久久久久一区探花 | 久久青草久久| 激情一区二区三区| 久久天天躁狠狠躁夜夜爽蜜月| 欧美成人第一页| 99国产精品私拍| 欧美视频1区| 欧美一级淫片播放口| 久久综合亚洲社区| 亚洲人成在线播放| 欧美三区视频| 久久精品91| 最近中文字幕mv在线一区二区三区四区| 99国产精品一区| 国产日韩欧美中文| 欧美好骚综合网| 亚洲男人的天堂在线aⅴ视频| 久久久久久香蕉网| 亚洲剧情一区二区| 国产精品网站在线观看| 国产拍揄自揄精品视频麻豆| 欧美一区二区三区日韩视频| 老司机精品视频一区二区三区| 亚洲国产精品激情在线观看| 中国亚洲黄色| 国产日韩欧美在线播放| 欧美亚洲尤物久久| 欧美激情精品久久久| 一区二区激情视频| 国产日韩精品久久| 欧美激情一区二区三区在线视频观看 | 久久综合给合久久狠狠狠97色69| 在线日韩欧美视频| 国产精品捆绑调教| 嫩草影视亚洲| 午夜视频在线观看一区| 亚洲青涩在线| 麻豆国产精品777777在线| 亚洲一区二区免费| 亚洲欧洲日产国产综合网| 国产精品自拍三区| 欧美日韩国产a| 美女亚洲精品| 久久成人精品视频| 亚洲三级免费| 欧美激情一区三区| 久久九九热re6这里有精品| 在线亚洲自拍| 亚洲免费久久| 亚洲国产小视频| 极品少妇一区二区三区精品视频| 欧美调教vk| 欧美精品日韩三级| 欧美**人妖| 美女日韩欧美| 你懂的国产精品| 久久在线免费观看视频| 欧美影院在线| 香蕉久久夜色精品|