• iOS 常用的#define合集


    1、定义常量

    定义常量的时候最好以小写字母k开头,让人见名知意,

    (1)导航栏高度:我们都知道iPhone竖屏时候导航栏的高度为44,这时候可以定义一个常量来表示该高度,

    #define kNaivgationBarHeight 44

    (2)屏幕的宽高:屏幕的宽高就是iOS设备硬件的屏幕尺寸,跟ViewController的view不完全相同,

    #define kSCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
    #define kSCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height

    2、内存管理的安全释放对象

    #define SAFE_RELEASE(x) [x release];x=nil

    注意结尾没有;冒号,这条语句在dealloc时候使用,例如

    - (void)dealloc
    {
        SAFE_RELEASE(array);
        [super dealloc];
    }

    为什么这句话表示安全释放呢?我们在使用Objective-C对象的时候,最后一定要保证它的引用计数retainCount为0,但是有时候我们也不能完全保证自己做到完美,这时候在dealloc的时候将对象设置为nil,这样就释放了该对象战友的内存区域,防止内存泄露。

    3、判断iOS系统的版本

    (1)当前系统版本号

    #define kCurrentSystemVersion [[[UIDevice currentDevice] systemVersion] floatValue]

    (2)判断是否是iOS7或更高的系统版本

    #define IOS_VERSION_7_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >=7.0)? (YES):(NO))

    (3)当前的系统语言

    #define kCurrentLanguage [[NSLocale preferredLanguages] objectAtIndex:0]

    4、定义常用的颜色

    有时候多个控件都需要设置同一个颜色,而UIColor的rgb写法确实浪费时间,是用宏定义常量,可以节省很多的代码,例如下面定义了紫色和暗灰,

    #define kPurpleColor [UIColor colorWithRed:137.0/255 green:21.0/255 blue:89.0/255alpha:1.0]
    
    #define kDarkGrayColor [UIColor colorWithRed:100.0/255 green:100.0/255 blue:100.0/255alpha:1.0]

    这时候给控件定义背景色就方便多了

    5、定义比NSLog更高级的DLog

    NSLog方便我们暴力调试,就是输出自己观察的变量的值,是用宏定义可以将NSLog封装得更加高级,在项目的pch文件中,是用如下代码,

    #define DEBUG_MODE 1
    #if DEBUG_MODE
    #define DLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
    #else
    #define DLog( s, ... )
    #endif
    

    例如在ViewController中使用DLog(@"12345");在控制台上面输出的内容如下,

    2014-04-18 19:33:30.377 DefineSample[3593:70b] <0x8a68360 ViewController.m:(54)> 12345

    这段信息包括字符串@"12345"的内存地址<0x8a68360>,所在的文件ViewController.m的54行,字符串内容为12345。其实看一看这些宏的定义,我们可以了解的更多系统的东西,例如__FILE__表示定位到哪个文件,__LINE__定位到哪一行。

    6、判断是iPhone真机(Device)还是模拟器(Simulator)

    #if TARGET_OS_IPHONE
        //针对真机进行编码
        NSLog(@"iPhone Device");
    #elif TARGET_IPHONE_SIMULATOR
        //针对模拟器编码
        NSLog(@"iPhone Simulator");
    #endif

    有的时候模拟器和真机的性能不一样,所以这样可以做一个判断。上面的宏TARGET_OS_IPHONE和TARGET_IPHONE_SIMULATOR是系统定义的,可以直接是用,按住Command点击,可以看见更多的信息。

    7、判断是否是ARC

    //ARC
    #if __has_feature(objc_arc)
        //是用arc编码
    #else
        //是用手动内存管理
    #endif

    8、定义GCD的后台线程和主线程

    //后台运行
    #define BACK_GCD(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
    
    //主线程运行
    #define MAIN_GCD(block) dispatch_async(dispatch_get_main_queue(),block)

      

  • 相关阅读:
    正态分布与中心极限定理
    超几何分布与二项分布及其期望
    cf492E. Vanya and Field(扩展欧几里得)
    ZR#317.【18 提高 2】A(计算几何 二分)
    小米OJ刷题日志
    cf519D. A and B and Interesting Substrings(前缀和)
    cf519C. A and B and Team Training(找规律)
    BZOJ2118: 墨墨的等式(最短路 数论)
    Service生命周期图
    python2.7中使用mysql (windows XP)
  • 原文地址:https://www.cnblogs.com/xiaohuzi1990/p/4346787.html
Copyright © 2020-2023  润新知