为什么想要把 C# 的方法扩展单独拿出来讲一下呢?

因为当我们学习一门新的编程语言时,很多时候都会拿这门编程语言跟我们熟悉的编程做对比。因为编程语言的设计者不同,编程思想和理念是存在很多差别的,就算是同样相同的面向对象的编程语言,也会在细节上存在各种差异。

学习编程语言的过程都是相似的,先介绍语言基础类型、流程控制、函数格式等。编程的过程基本上就是流程的控制,判断状态,执行不同的逻辑,类、对象、方法是行为的封装。我们在刚接触编程会写很多 if-else、switch,为了减少 if-else 和 switch 的使用,会有继承、设计模式的应用。

在说到写代码这件事之前,可以先来聊聊程序员这份职业。我不太清楚大家对于程序员这份职业的理解是什么,我简单说下我对程序员认知的变化吧,或者说我对职业的认知。

相信大多数程序员接触到的第一门编程语言都是 C 语言,我们的编程思维基本上都是 C 语言帮助我们塑造的,这种编程思想会贯彻我们整个职业生涯。C 语言是一门面向过程的语言,表达力强、非常直观,是初学编程接受程度较高的语言。但是随着程序应用越来越广泛,面向过程的编程思想对现实世界的抽象稍显不足。

CIL: Common Intermediate Language,通用中间语言
CLI: Common Language Infrastructure,通用语言基础结构
JIT: Just-in-Time compilation,即时编译
AOT: Ahead-of-Time,提前编译或静态编译

对 Unity 有一定的了解应该都知道 Unity 本身是不支持热更新的,但是在各种需求的驱使下,想要完全不用热更新几乎是不可能的,所以就诞生了很多热更新方案。有 tolua、xlua 这些成熟的 lua 解决方案,也有就是完全用 C# 实现的 ILRuntime 方案,因为热更新的代码也是用 C# 实现,没有 lua 的学习成本,现在 ILRuntime 的热更新方案越来越流行。

我们今天就着重介绍一下 ILRuntime 以及它的基本原理。

最近游戏上线了 iOS 版本,期间来来回回提审了 2、3 次,最终没有经历太多波折顺利上线,写下这篇文章记录下审核期间遇到的问题,方便以后查看和提前避免一些问题。

最近游戏的热更新出了一些问题,导致崩溃率有点上升,并且热更新有些文件没有生效。游戏中用的热更新模块是 Cocos 引擎提供的,就花了点时间去翻了 Cocos 的源码文件 AssetsManagerEx.cpp,了解了 Cocos 引擎处理热更新的流程以及问题,也借此机会思考下热更新的处理逻辑。

最近一年多的时间几乎都花在一款游戏上面,这款是自己一个人从零到一做起来的,现在已经完成的差不多了,最近准备正式上线,上线之后就会面临很多玩家,对游戏和自己都是很大的挑战。如何去处理好玩家反馈的问题,如何去更好的避免玩家遇到问题等等,这些都是后续需要提升的地方。先不说远了,在游戏正式上线之前就遇到很多问题,在这里记录一下完成这款游戏遇到的问题。

虽然当下的设备越来越强大,处理速度也越来越快,显示效果越来越好。但是如果处理不好,再强大的设备还是会有卡顿的可能性,所以了解卡顿产生的原因是很有必要的。

有段时间没看关于 iOS 的东西了,前段时间在翻 Instapaper 的时候看到了 [NSVALUE AND BOXED EXPRESSIONS][2] 这篇文章,就随便看了看,正好自己对这些也不是很了解,就记录下来。

在 Apple LLVM Compiler 4.0 支持嵌套表达式 (Boxed Expressions)。即可以用 @() 的方式生成相应的对象,例如:@1 相当于 [NSNumber numberWithInt:1];,@1 称为 NSNumber 字面量。ObjC 中还有集合字面量,以及通过下标来访问 OC 对象。下面介绍在 OC 中字面量的使用。

又是很久没有写博客了,所以再次写一篇来凑凑字数 😜,主要还是把自己最近刚知道的知识记录下来,方便以后来查看。

因为开始做游戏开发,所以就开始学习 Cocos 相关的内容。最近在几个地方踩了坑,虽然是很小的知识点,但是记录下来也算是记录成长的历程 😶😶。

有很长一段时间没有写博客了,前一段时间做毕设,写论文,改论文,答辩,拍毕业照... 很多很多不喜欢的事情,再加上那段时间沉不下心,就很少有机会去写博客了。

这周一刚进公司,开始做游戏,原来对游戏开发也不太了解,进公司这几天也一直都在学习各种东西,JS 语法,常见的 Cocos API 等等。今天在看 Cocos 的东西时,对 Cocos 的继承不是很了解,就去网上搜资料,在看 [John Resiq 的继承写法解析][1]的时候,对 apply 函数的用法不是很了解,于是又去查资料,这篇博客主要是记录自己对三个函数的理解,也让自己开始继续写博客。

ObjC 是使用引用计数来管理对象内存的,关于引用计数更加详细的解释,可以看 [理解 iOS 的内存管理][5],这篇文章还讲了 ARC 下可能存在的内存管理问题。

ARC 是编译器的特性,在编译的时候自动插入管理引用计数的代码,给 ObjC 对象提供自动内存管理,并生成相应的 dealloc 方法。ARC 可以让你更加专注于编写代码的逻辑而不是去管理内存,但是在 ARC 下遵循 ObjC 的命名规则就显得很重要了。

关于 NSFastEnumeration 的基本介绍可以看这篇 [使自定义的类支持 iOS 的枚举方式][7]。

不多说废话,直接进主题。

事先可以看一下 [Comparison of Objective-C Enumeration Techniques][1] 和 [NSFastEnumeration / NSEnumerator][2],对比了 ObjC 中各种遍历方式。