• iOS开发中那些高效常用的宏


    iOS开发过程中使用一些常用的宏可以提高开发效率,提高代码的重用性;将这些宏放到一个头文件里然后再放到工程中的-Prefix.pch文件中(或者直接放到-Prefix.pch中)直接可以使用,灰常方便。

    本文http://www.cnblogs.com/ygm900/p/4519423.html

    做了一些分类和注释,可以根据自己习惯再添加或者删除或者修改这些宏进行使用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    //
    //  MacroDefinition.h
    //  MacroDefinitionDemo
    //
    //  Created by 新风作浪 on 13-6-9.
    //  Copyright (c) 2013年 SpinningSphere Labs. All rights reserved.
    //
     
    #ifndef MacroDefinition_h
    #define MacroDefinition_h
     
    //-------------------获取设备大小-------------------------
    //NavBar高度
    #define NavigationBar_HEIGHT 44
    //获取屏幕 宽度、高度
    #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
    #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
     
    //-------------------获取设备大小-------------------------
     
     
    //-------------------打印日志-------------------------
    //DEBUG  模式下打印日志,当前行
    #ifdef DEBUG
    #   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
    #else
    #   define DLog(...)
    #endif
     
     
    //重写NSLog,Debug模式下打印日志和当前行数
    #if DEBUG
    #define NSLog(FORMAT, ...) fprintf(stderr," function:%s line:%d content:%s ", __FUNCTION__, __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
    #else
    #define NSLog(FORMAT, ...) nil
    #endif
     
    //DEBUG  模式下打印日志,当前行 并弹出一个警告
    #ifdef DEBUG
    #   define ULog(fmt, ...)  { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__]  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
    #else
    #   define ULog(...)
    #endif
     
     
    #define ITTDEBUG
    #define ITTLOGLEVEL_INFO     10
    #define ITTLOGLEVEL_WARNING  3
    #define ITTLOGLEVEL_ERROR    1
     
    #ifndef ITTMAXLOGLEVEL
     
    #ifdef DEBUG
    #define ITTMAXLOGLEVEL ITTLOGLEVEL_INFO
    #else
    #define ITTMAXLOGLEVEL ITTLOGLEVEL_ERROR
    #endif
     
    #endif
     
    // The general purpose logger. This ignores logging levels.
    #ifdef ITTDEBUG
    #define ITTDPRINT(xx, ...)  NSLog(@"%s(%d): " xx, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
    #else
    #define ITTDPRINT(xx, ...)  ((void)0)
    #endif
     
    // Prints the current method's name.
    #define ITTDPRINTMETHODNAME() ITTDPRINT(@"%s", __PRETTY_FUNCTION__)
     
    // Log-level based logging macros.
    #if ITTLOGLEVEL_ERROR <= ITTMAXLOGLEVEL
    #define ITTDERROR(xx, ...)  ITTDPRINT(xx, ##__VA_ARGS__)
    #else
    #define ITTDERROR(xx, ...)  ((void)0)
    #endif
     
    #if ITTLOGLEVEL_WARNING <= ITTMAXLOGLEVEL
    #define ITTDWARNING(xx, ...)  ITTDPRINT(xx, ##__VA_ARGS__)
    #else
    #define ITTDWARNING(xx, ...)  ((void)0)
    #endif
     
    #if ITTLOGLEVEL_INFO <= ITTMAXLOGLEVEL
    #define ITTDINFO(xx, ...)  ITTDPRINT(xx, ##__VA_ARGS__)
    #else
    #define ITTDINFO(xx, ...)  ((void)0)
    #endif
     
    #ifdef ITTDEBUG
    #define ITTDCONDITIONLOG(condition, xx, ...) { if ((condition)) {
    ITTDPRINT(xx, ##__VA_ARGS__);
    }
    } ((void)0)
    #else
    #define ITTDCONDITIONLOG(condition, xx, ...) ((void)0)
    #endif
     
    #define ITTAssert(condition, ...)                                      
    do {                                                                     
    if (!(condition)) {                                                    
    [[NSAssertionHandler currentHandler]                                 
    handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__]
    file:[NSString stringWithUTF8String:__FILE__] 
    lineNumber:__LINE__                                 
    description:__VA_ARGS__];                            
    }                                                                      
    while(0)
     
    //---------------------打印日志--------------------------
     
     
    //----------------------系统----------------------------
     
    //获取系统版本
    #define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
    #define CurrentSystemVersion [[UIDevice currentDevice] systemVersion]
     
    //获取当前语言
    #define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
     
    //判断是否 Retina屏、设备是否%fhone 5、是否是iPad
    #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
    #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
    #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
     
     
    //判断是真机还是模拟器
    #if TARGET_OS_IPHONE
    //iPhone Device
    #endif
     
    #if TARGET_IPHONE_SIMULATOR
    //iPhone Simulator
    #endif
     
    //检查系统版本
    #define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
    #define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
    #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    #define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
    #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
     
     
    //----------------------系统----------------------------
     
     
    //----------------------内存----------------------------
     
    //使用ARC和不使用ARC
    #if __has_feature(objc_arc)
    //compiling with ARC
    #else
    // compiling without ARC
    #endif
     
    #pragma mark - common functions
    #define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
     
    //释放一个对象
    #define SAFE_DELETE(P) if(P) { [P release], P = nil; }
     
    #define SAFE_RELEASE(x) [x release];x=nil
     
     
     
    //----------------------内存----------------------------
     
     
    //----------------------图片----------------------------
     
    //读取本地图片
    #define LOADIMAGE(file,ext) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:file ofType:ext]]
     
    //定义UIImage对象
    #define IMAGE(A) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:A ofType:nil]]
     
    //定义UIImage对象
    #define ImageNamed(_pointer) [UIImage imageNamed:[UIUtil imageName:_pointer]]
     
    //建议使用前两种宏定义,性能高于后者
    //----------------------图片----------------------------
     
     
     
    //----------------------颜色类---------------------------
    // rgb颜色转换(16进制->10进制)
    #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
     
    //带有RGBA的颜色设置
    #define COLOR(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]
     
    // 获取RGB颜色
    #define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]
    #define RGB(r,g,b) RGBA(r,g,b,1.0f)
     
    //背景色
    #define BACKGROUND_COLOR [UIColor colorWithRed:242.0/255.0 green:236.0/255.0 blue:231.0/255.0 alpha:1.0]
     
    //清除背景色
    #define CLEARCOLOR [UIColor clearColor]
     
    #pragma mark - color functions
    #define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
    #define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
     
    //----------------------颜色类--------------------------
     
     
     
    //----------------------其他----------------------------
     
    //方正黑体简体字体定义
    #define FONT(F) [UIFont fontWithName:@"FZHTJW--GB1-0" size:F]
     
     
    //定义一个API
    #define APIURL                @"http://xxxxx/"
    //登陆API
    #define APILogin              [APIURL stringByAppendingString:@"Login"]
     
    //设置View的tag属性
    #define VIEWWITHTAG(_OBJECT, _TAG)    [_OBJECT viewWithTag : _TAG]
    //程序的本地化,引用国际化的文件
    #define MyLocal(x, ...) NSLocalizedString(x, nil)
     
    //G-C-D
    #define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
    #define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)
     
    //NSUserDefaults 实例化
    #define USER_DEFAULT [NSUserDefaults standardUserDefaults]
     
     
    //由角度获取弧度 有弧度获取角度
    #define degreesToRadian(x) (M_PI * (x) / 180.0)
    #define radianToDegrees(radian) (radian*180.0)/(M_PI)
     
     
     
    //单例化一个类
    #define SYNTHESIZE_SINGLETON_FOR_CLASS(classname)
    static classname *shared##classname = nil;
    + (classname *)shared##classname
    {
    @synchronized(self)
    {
    if (shared##classname == nil)
    {
    shared##classname = [[self alloc] init];
    }
    }
    return shared##classname;
    }
    + (id)allocWithZone:(NSZone *)zone
    {
    @synchronized(self)
    {
    if (shared##classname == nil)
    {
    shared##classname = [super allocWithZone:zone];
    return shared##classname;
    }
    }
    return nil;
    }
    - (id)copyWithZone:(NSZone *)zone
    {
    return self;
    }
     
     
     
    #endif
  • 相关阅读:
    一起谈.NET技术,JAVA与.NET的相互调用——TCP/IP相互调用基本架构 狼人:
    一起谈.NET技术,.NET异步编程:IO完成端口与BeginRead 狼人:
    一起谈.NET技术,VS2010自定义新建文件模版 狼人:
    一起谈.NET技术,理解.NET程序集的执行过程 狼人:
    一起谈.NET技术,JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯 狼人:
    一起谈.NET技术,用NuGet掌管你的Visual Studio扩展 狼人:
    一起谈.NET技术,Visual Studio 2010 中的代码约定设置 狼人:
    一起谈.NET技术,C#中的语言特性都是从何而来? 狼人:
    一起谈.NET技术,关于Winform下,获取Treeview中CheckBox选中项的技巧 狼人:
    一起谈.NET技术,ASP.NET MVC 3和Razor中的@helper 语法 狼人:
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/5848692.html
Copyright © 2020-2023  润新知