看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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容