Android培训
美国上市Android培训机构

400-111-8989

热门课程

iOS-开发中常用的宏有哪些?

  • 时间:2017-04-05
  • 发布:Android培训
  • 来源:Android学习笔记

OC对象判断是否为空?

            字符串是否为空

            #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] < 1 ? YES : NO )

            数组是否为空

            #define kArrayIsEmpty(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0)

            字典是否为空

            #define kDictIsEmpty(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0)

            是否是空对象

            #define kObjectIsEmpty(_object) (_object == nil \
            || [_object isKindOfClass:[NSNull class]] \
            || ([_object respondsToSelector:@selector(length)] && [(NSData *)_object length] == 0) \
            || ([_object respondsToSelector:@selector(count)] && [(NSArray *)_object count] == 0))

    UI尺寸类的宏

            状态栏高度

            #define STATUS_BAR_HEIGHT 20

            NavBar导航栏高度

            #define NAVIGATION_BAR_HEIGHT 44

            状态栏 + 导航栏 高度

            #define STATUS_AND_NAVIGATION_HEIGHT ((STATUS_BAR_HEIGHT) + (NAVIGATION_BAR_HEIGHT))

            屏幕 rect

            #define SCREEN_RECT ([UIScreen mainScreen].bounds)
            #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
            #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
            #define CONTENT_HEIGHT (SCREEN_HEIGHT - NAVIGATION_BAR_HEIGHT - STATUS_BAR_HEIGHT)

            屏幕分辨率

            #define SCREEN_RESOLUTION (SCREEN_WIDTH * SCREEN_HEIGHT * ([UIScreen mainScreen].scale))

    LOG日志打印

            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,"\nfunction:%s line:%d content:%s\n", __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\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
            #else
            # define ULog(...)
            #endif

    判断设备?系统?

            是否iPad

            #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

            是否iPad

            #define someThing (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)? ipad: iphone

            获取系统版本

            #define IOS_VERSION [[UIDevice currentDevice] systemVersion] floatValue]
            #define CurrentSystemVersion [UIDevice currentDevice] systemVersion]

            判断是否 Retina屏?

            #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [UIScreen mainScreen] currentMode].size) : NO)

    判断当前的iPhone设备/系统版本

            判断是否为iPhone

            #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

            判断是否为iPad

            #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

            判断是否为ipod

            #define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])

            判断是否为 iPhone 5SE

            #define iPhone5SE [[UIScreen mainScreen] bounds].size.width == 320.0f && [[UIScreen mainScreen] bounds].size.height == 568.0f

            判断是否为iPhone 6/6s

            #define iPhone6_6s [[UIScreen mainScreen] bounds].size.width == 375.0f && [[UIScreen mainScreen] bounds].size.height == 667.0f

            判断是否为iPhone 6Plus/6sPlus

            #define iPhone6Plus_6sPlus [[UIScreen mainScreen] bounds].size.width == 414.0f && [[UIScreen mainScreen] bounds].size.height == 736.0f

            获取系统版本

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

            判断 iOS 8 或更高的系统版本

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

            判断设备的操做系统是不是ios7

            #define IOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0]

            判断是真机还是模拟器

            #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)

    定义一个define函数

    #define TT_RELEASE_CF_SAFELY(__REF) { if (nil != (__REF)) { CFRelease(__REF); __REF = nil; } }

    使用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]

            设置随机颜色

            #define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]

            获取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 LRCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])

            程序的本地化,引用国际化的文件

            #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)

    沙盒目录文件

    //获取temp
    #define kPathTemp NSTemporaryDirectory()
    //获取沙盒 Document
    #define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
    //获取沙盒 Cache
    #define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]

    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; \

}

上一篇:五步教你高效学好Andriid开发
下一篇:Android开发中相见恨晚的冷知识

新手须知:Android开发的各种专业术语

Android手机安全设置,做了这些才算安全

2017年Android & iOS 开源应用程序推荐

Android系统发展历史与版本进化

选择城市和中心
贵州省

广西省

海南省

台湾