首先推荐两篇写的非常好的博文:
一行行看SDWebImage源码(一)
一行行看SDWebImage源码(二)
关于常量的用法
这边我用一个例子来讲
当我们用通知来进行对象间的通信时,如下代码:
[[NSNotificationCenter defaultCenter]
postNotificationName:
object:nil];
这个name的定义大概有如下几种
// 1.直接给一个NSString类型的常量
[[NSNotificationCenter defaultCenter]
postNotificationName: @"notification_name"
object:nil];
// 2.直接给一个NSString类型的变量
NSString* notificationName = @"notificationName";
[[NSNotificationCenter defaultCenter]
postNotificationName: notificationName
object:nil];
// 3.将name提取到宏定义
#define NOTIFICATION_NAME @"notificationName"
[[NSNotificationCenter defaultCenter]
postNotificationName: NOTIFICATION_NAME
object:nil];
// 4.将name提取到全局常量
// .h文件中声明
extern NSString *const SDWebImageDownloadStartNotification;
// .m文件中定义
NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification";
[[NSNotificationCenter defaultCenter]
postNotificationName: SDWebImageDownloadStartNotification
object:nil];
上面4中方式都可以实现通知,但是却可以看出一个oc程序员的代码习惯怎么样
第一种代码习惯最一般(这种对于后期维护或者别人看此代码应该都比较头痛)
第二种还好一些,将其提取到变量中
第三种也不错,将其提取到宏中,但是宏不是常量,如果被别人在某个地方修改就尴尬了(虽然几率低),而且宏没有类型
第四种就比较好了(这里是直接拿SDWebImage举例),声明为全局常量,既有类型又不怕被误改,常量在改动的时候,编译器会报错
eg:
常量分为两种:
全局常量:全局都能访问
eg: .h文件中声明 .m文件中定义
extern NSString *const SDWebImageDownloadStartNotification;
NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification";
局部常量:.m文件使用,外界不可访问
一般都以小写k打头如下
希望会给大家带来帮助 O(∩_∩)O