导语
今天一天就在看这个YYKit框架,越看越觉得心惊,感觉自己以前写的代码简直垃圾,所以在此记录一下学习到得东西,希望每天进步一点点。
废话就到此结束了,这里只要讲一下在这个model中所学习到得一些知识
宏与内联
虽然内联函数对于我们初级开发者来说是非常陌生的,但是只要能用到的,就是我们必须掌握的,能学会的就是我们的,所以来吧。
内联函数
内联函数是为了解决函数调用效率的问题,由于函数之间的调用,会从一个内存地址调到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址。函数调用会有一定的时间开销,引入内联函数就是为了解决这一问题。同时也可以增加代码的安全性,防止反编译。
废话不多说了,上代码
static inline int add(int a, int b){
return a+b;
}
如果不用static inline修饰的话,首先汇编时会有大量的 '@add' 等二进制代码出现,而且会显得非常臃肿。
这里还有一个知识点是 attribute((always_inline)),这是强制内联的方式,所有加了attribute((always_inline))的函数再被调用时不会被编译成函数调用而是直接扩展到调用函数体内。
如:
#define force_inline inline attribute((always_inline))
当使用时:
static force_inline 返回类型 调用函数()
这些都是其最基本的使用。
ENUM和NS_ENUM的使用
枚举是我们在开发中最常用的几个类型之一。枚举其实很重要,特别是在应用开发初期,服务器端数据格式需要更改得情况下,枚举和宏都能是程序简洁,并且改动小。这里我们在编写代码中最常用的应该是 NS_ENUM
类型的枚举吧.
一般情况下,我们采用C风格的enum关键字可以定义枚举类型。
enum{
UIViewAnimationTransitionNone,
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;
在C++ 11之后引入了 另外一种写法
//NS_ENUM,定义状态等普通枚举
typedef NS_ENUM(NSUInteger, TTGState) {
TTGStateOK = 0,
TTGStateError,
TTGStateUnknow
};
//NS_OPTIONS,定义选项
typedef NS_OPTIONS(NSUInteger, TTGDirection) {
TTGDirectionNone = 0,
TTGDirectionTop = 1 << 0,//这里的左移0 即为2的0次方
TTGDirectionLeft = 1 << 1,
TTGDirectionRight = 1 << 2,
TTGDirectionBottom = 1 << 3
};
充分的用好枚举,可以增强代码的可读性,减少各种“错误”,让代码更加的规范。
网友评论