在iOS开发中,广泛运用了类蔟(Class clusters)的设计模式。如NSNumber、NSString、NSArray等。类簇其实是对现实的一种抽象和封装,基于抽象工厂模式(Abstract Factory Pattern)。最近在读书过程中联想到一些东西,于是尝试更加深入地去了解它。
得益于Objective-C的Runtime系统,对象的方法调用通过消息传递的机制进行,从而避免了很多情况下的判空操作。block也是Objective-C世界的对象,然而如果当它为空时,调用它却能导致崩溃。归根结底,其实是因为block的调用并不使用消息传递那套机制,而是通过跳转到特定的函数地址进行函数调用。我们可以先这么粗略的解释一下,然后再深入一点进行探讨。
在应用层面上,很多情况下计算机对于内存和存储器的操作都是高度抽象的,我们不必去关心其内部是如何工作的。但是总有那么些情况下,需要我们去了解其中的奥秘。在几年前开发aoFont的时候,就遇到了文件字节序(Endianness)问题,即大端序(Big endian)、小端序(Little endian)的问题。也就是需要读取的字体文件是以大端序存储的,但是iOS设备CPU使用的是小端序,这样以来直接读取出来的数据是错误的,需要对读取出来的数据进行处理。
在开发过程中,常见到这样的写法:[NSDictionary dictionaryWithDictionary:otherDict]
、[otherDict copy]
。在很多情况下,我们甚至不用去考虑两种方法的异同,随机地选择用哪个方法。但二者又确确实实地有着些许不同。
__attribute__指令在C、C++和Objective-C中修饰一段代码,用处一是为编译器提供上下文,用处之二是为未来看到这段代码的人(包括自己)提供额外的信息。__attribute__指令对编译器优化有重要意义,并且对于开发者来说一定程度的额外信息是有积极意义的。在开发过程中可以发现苹果的SDK中已经普遍运用了__attribute__指令。