Felix's Space

Never send to know for whom the bells tolls; it tolls for thee.

关于宏

iOS

C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like macro)。对于对象宏来说确实相对简单,但却也不是那么简单的查找替换。对象宏一般用来定义一些常数,举个例子:

#define M_PI    3.14159265358979323846264338327950288

#define关键字表明即将开始定义一个宏,紧接着的M_PI是宏的名字,空格之后的数字是内容。类似这样的#define X A的宏是比较简单的,在编译时编译器会在语义分析认定是宏后,将X替换为A,这个过程称为宏的展开。比如对于上面的M_PI直接使用。

9 Aug 2014 #iOS #macro

关于FMDB/SQLite

Database

https://github.com/ccgus/fmdb 下载源文件,然后直接将fmdb文件夹拖入到你的工程就OK。 当然你需要添加依赖库:libsqlite3.dylib

拖入源文件,并且添加依赖库以后你就可以使用FMDB了,引用头文件 #import "FMDB.h"

18 Jul 2014 #iOS #FMDB #Database

NSNotification 通知

iOS

NSNotification 一个对象通知另外一个对象,可以用来传递参数、通信等作用,与delegate的一对一不同,通知是一对多的。在一个对象中注册了通知,那么其他任意对象都可以来对这个对象发出通知。

  • NSNotificationCenter
  • NSNotificationQueue

3 Jul 2014 #iOS #NSNotification

有关block

iOS

block发生引用循环

一个对象中强引用了block,在block中又使用了该对象,就会发生循环引用。解决方法就是将该对象使用 __weak或者 __block 修饰符修饰后在block中使用。

  1. id weak weakSelf = self, 或者 weak __typeof(&*self)weakSelf = self (可以将该方法设置为宏)
  2. id __block weakSelf = self;

29 Jun 2014 #iOS #block

runloop 简介

iOS

runloop 和线程有什么关系?

总的来说,Runloop,如其名,表示着一直在运行的循环。实际上,runloop和线程是紧密相连的,可以这样说runloop是为了线程而生,没有线程,它就没有存在的必要。每个线程,包括程序的主线程(main thread)都有与之对应的runloop对象。

26 Jun 2014 #iOS #runloop

类中增加实例变量

iOS

能否向编译后得到的类中增加实例变量?能否向运行时创建的类中增加实例变量?

  • 不能向编译后得到的类中增加实例变量
  • 能向运行时创建的类中添加实例变量

23 Jun 2014 #iOS #runtime

什么时候会报unrecognized selector的异常?

iOS

简单来说:

当调用该对象上某个方法,而该对象上没有实现这个方法的时候, 可以通过“消息转发”进行解决。

objc是动态语言,每个方法在运行时会被动态转为消息发送,即:objc_msgSend(receiver, selector)

22 Jun 2014 #iOS #error