看SDWebImage源码有感

作者: helloDolin | 来源:发表于2016-07-04 17:17 被阅读515次

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

    相关文章

      网友评论

      • 清眸如画:那也要看具体情况。
        helloDolin:@约定一生 如果是老项目的话,尊重历史遗留

        新项目的话,个人觉得好的代码习惯会更好
      • 5cfaa4a760b2:又学到了 :clap:
        helloDolin:@ShaneFisher 嘿嘿(๑ ̄ ̫  ̄๑)
      • _凉风_:写的不错,支持原创!
        helloDolin:@_凉风_ 谢谢鼓励:smile:

      本文标题:看SDWebImage源码有感

      本文链接:https://www.haomeiwen.com/subject/gczcjttx.html