zoukankan      html  css  js  c++  java
  • 宏定义记录重点

    1.NSLog宏定义:

    很多情况下我们会对这行log的所在的文件位置方法什么的会比较关心。在每次NSLog里都手动加上方法名字和位置信息什么的无疑是个笨办法,而如果一个工程里已经有很多NSLog的调用了,一个一个手动去改的话无疑也是噩梦。我们通过宏,可以很简单地完成对NSLog原生行为的改进,优雅,高效。只需要在预编译的pch文件中加上

    //A better version of NSLog
    #define NSLog(format, ...) do {                                                                          
                                 fprintf(stderr, "<%s : %d> %s
    ",                                           
                                 [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],  
                                 __LINE__, __func__);                                                        
                                 (NSLog)((format), ##__VA_ARGS__);                                           
                                 fprintf(stderr, "-------
    ");                                               
                               } while (0)

    2.Rect, Size, Point:

    #define NSLogRect(rect) NSLog(@"%s x:%.4f, y:%.4f, w:%.4f, h:%.4f", #rect, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height)
    #define NSLogSize(size) NSLog(@"%s w:%.4f, h:%.4f", #size, size.width, size.height)
    #define NSLogPoint(point) NSLog(@"%s x:%.4f, y:%.4f", #point, point.x, point.y)

    3.以下是我项目中使用到的一些宏定义:

    #ifndef Macros_Utils_h
    #define Macros_Utils_h
    
    // Thread
    #define MKAssertMainThread() NSAssert([NSThread isMainThread], @"这个方法必须在主线程调用");
    #define MKAssertOtherThread() NSAssert(![NSThread isMainThread], @"这个方法必须在子线程调用");
    
    // KVO KVC
    #define keyPath(obj, attr) @(((void)obj.attr, #attr))
    #define keyPathWithSELName(sltName) NSStringFromSelector(@selector(sltName)) // property/selectorName -> keyPath
    
    // NSLog
    #if defined(DEBUG) || defined(_DEBUG)
    #define NSLog(format, ...) 
    do {
    fprintf(stderr, "<%s : %d> %s
    ", [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __func__); 
    (NSLog)((format), ##__VA_ARGS__); 
    fprintf(stderr, "-------
    "); 
    } while (0)
    #else
    #define NSLog(...)
    #endif
    
    // iOS 版本
    #define MKSystemVersionGreaterOrEqualThan(version) ([[[UIDevice currentDevice] systemVersion] floatValue] >= version)
    #define IOS7_OR_LATER MKSystemVersionGreaterOrEqualThan(7.0)
    #define IOS8_OR_LATER MKSystemVersionGreaterOrEqualThan(8.0)
    #define IOS9_OR_LATER MKSystemVersionGreaterOrEqualThan(9.0)
    #define IOS8_1_OR_LATER MKSystemVersionGreaterOrEqualThan(8.1)
    #define MKSystemVersionLowerOrEqualThan(version) ([[[UIDevice currentDevice] systemVersion] floatValue] < version)
    #define IOS6_EARLY MKSystemVersionLowerOrEqualThan(6.0)
    
    // safe access
    #define isNilOrNull(obj) (obj == nil || [obj isEqual:[NSNull null]])
    #define isClassEqualNil(clazz) (clazz == Nil)
    #define NULL_POINTER NULL
    
    // bundle
    #define DOCUMENT_FOLDER ([NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject])
    #define bundlePathWithName(name) [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:name]
    #define bundleWithName(name) [NSBundle bundleWithPath:bundlePathWithName(name)]
    
    // 判断string是否为空 nil 或者 @"";
    #define IsNilString(__String) (__String==nil || [__String isEqualToString:@""] || [[__String stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@""])
    
    
    #endif /* Macros_Utils_h */

    暂时记录这么多,后续补充!

  • 相关阅读:
    Installing Python Modules
    《利用Python 进行数据分析》
    使用Python进行描述性统计
    各种数字证书区别
    数字证书及CA的扫盲介绍
    expect学习笔记及实例详解
    使用openssl命令制作ecc证书
    那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)
    Openssl与私有CA搭建
    Openssl编程--源码分析
  • 原文地址:https://www.cnblogs.com/pengsi/p/6023142.html
Copyright © 2011-2022 走看看