看SDWebImage源码有感

首先推荐两篇写的非常好的博文:
一行行看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:

Paste_Image.png

常量分为两种:
全局常量:全局都能访问
eg: .h文件中声明 .m文件中定义

extern NSString *const SDWebImageDownloadStartNotification;

NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification";

局部常量:.m文件使用,外界不可访问
一般都以小写k打头如下


希望会给大家带来帮助 O(∩_∩)O

你可能感兴趣的:(看SDWebImage源码有感)