前段时间工作时需要使用 C/C++ 来做一些压缩、加密等操作,其中经常要用到一些文件操作的函数,自己也封装了一些便利的函数。现在这部分工作内容已完结,就对这些文件操作做一次总结,将来再用到时减少学习成本。
公司的游戏会将一些资源文件压缩后放在服务器,客户端在需要的时候拉取,然后解压使用。用的是 C# 的 lz4 进行的压缩和解压缩,导致申请的内存没办法及时释放(mono 虚拟机申请的内存是不会归还给系统的),所以如果手机上如果经历了边玩边下载的话,峰值内存会有大概100M+的上浮,这对于一些内存比较受限的机器来说是不友好的。
Unity 打出的安卓包为了防止反编译,需要对 Assembly-CSharp.dll 加密处理。Assembly-CSharp.dll 是由 libmono.so 运行时读取然后在 mono 虚拟机上执行,所以需要修改 libmono.so 源码,在加载 Assembly-CSharp.dll 前解密处理,然后重新编译出 libmono.so。
OC 类和对象,在 runtime 层都是用 struct 表示的,category 也不例外,由于 category 的结构体中没有 ivar_list_t 这一字段,所以无法直接在一个类别中添加成员变量。如果需要,通常是借助 runtime 来关联对象,但关联对象的策略里没有提供对弱引用对象的支持,本文用来探讨如何关联一个弱引用对象。
公司主要做 Untiy 开发,Untiy 导出的 Xcode 工程经常会遇到一些编译错误,这里记录下遇到的报错和解决办法。其中问题描述尽量使用文字,以后可以复制 Xcode 中的错误日志来搜索。解决办法则尽可能添加图片说明,方便不熟悉 Xcode 的人使用。
Node.js 是运行在服务器上的 JavaScript,具备单线程、异步 IO、事件驱动等特性。之前对这些特性的理解只是通过一些博客,始终不得要领。最近读了朴灵的《深入浅出 Node.js》,对此有了更清晰明确的认识。
AOP 是 Java Spring 框架另一个重要的功能,AOP(Aspect Oriented Programming)意为:面向切面编程,它是一种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想,本文用于学习这种编程思想,并给出 iOS 中的实现。
Spring 是 Java 最火的框架了,控制反转(IoC)是 Spring 框架的核心,依赖注入(DI)是它的实现方式,本文用来学习理解这种编程思想,具体的实现要根据使用的语言来选择对应的容器框架。
Unity 打 iOS 平台的包过程比较繁琐,手动操作会比较浪费时间还容易出错。这里把一些出包参数放在了 Jenkins 上配置,再结合 Shell、Python 脚本执行参数化构建,实现整个流程的自动化。
Untiy 工程导出 Xcode 后通常需要修改一些 iOS 相关的配置,如果每次导出 Xcode 都去修改会比较浪费时间,这里介绍一种简单快捷的做法。