cocos2dx的文件管理,几点不足吐槽一下

  1. FileUtils 操作文件的时候, 基本上都是直接返回一个内存块, 但其实有很多情况文件是需要处于长期打开状态的, 而这种文件往往又很大, 导致内存白白浪费。 例如背景音乐(cocos2dx已经封装了音乐,交给了系统底层处理, 但如果是自己写的声音引擎就要处理这个问题了) 或者是一段很长的视频。
  2. FileUtils打开文件的时候, 返回的是一块内存地址, 调用者使用完后需要自己delete掉。 这违反了“谁申请, 谁释放”原则。 FileUtils是属于libcocos2d库的, 如果存在一个第三方库调用FileUtils, 第三方库delete由libcocos2d分配的内存将有可能产生灾难性后果。
  3. 返回一个没有包装的内存块, 导致高层与底层之间不够透明, 需要扩展的时候很麻烦。

建议FileUtils 不要返回一个内存块, 而是返回一个 File接口, 这个接口可能是一个 包装了一个内存块的的File对象, 也可能是一个包装了 FILE* 的 File对象,或者一个包装了 内存映射文件的对象 等等自定义对象。 调用者使用完接口后, 调用close方法由对象自己去释放资源, delete内存也好, 关闭文件指针也好,这些都对调用者透明。

cocos2dx3.2用了一个Data去管理用fopen,fread,fclose开辟的内存的,fileutils是返回一个Data的,当Data被晰构时,会free点fileutils malloc出来的的内存,上层是需要用Data这个类就可以,它会帮你管理加载文件的内存。