C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like macro)。对于对象宏来说确实相对简单,但却也不是那么简单的查找替换。对象宏一般用来定义一些常数,举个例子:
#define M_PI 3.14159265358979323846264338327950288
#define
关键字表明即将开始定义一个宏,紧接着的M_PI
是宏的名字,空格之后的数字是内容。类似这样的#define X A
的宏是比较简单的,在编译时编译器会在语义分析认定是宏后,将X替换为A,这个过程称为宏的展开。比如对于上面的M_PI
直接使用。
到https://github.com/ccgus/fmdb 下载源文件,然后直接将fmdb文件夹拖入到你的工程就OK。 当然你需要添加依赖库:libsqlite3.dylib
拖入源文件,并且添加依赖库以后你就可以使用FMDB了,引用头文件
#import "FMDB.h"
NSNotification 一个对象通知另外一个对象,可以用来传递参数、通信等作用,与delegate的一对一不同,通知是一对多的。在一个对象中注册了通知,那么其他任意对象都可以来对这个对象发出通知。
3 Jul 2014 #iOS #NSNotification
总的来说,Runloop,如其名,表示着一直在运行的循环。实际上,runloop和线程是紧密相连的,可以这样说runloop是为了线程而生,没有线程,它就没有存在的必要。每个线程,包括程序的主线程(main thread)都有与之对应的runloop对象。
简单来说:
当调用该对象上某个方法,而该对象上没有实现这个方法的时候, 可以通过“消息转发”进行解决。
objc
是动态语言,每个方法在运行时会被动态转为消息发送,即:objc_msgSend(receiver, selector)
。