标签:
1.处理NSLog事件(开发者模式打印,发布者模式不打印)
| 1 2 3 4 5 |   #ifdef DEBUG  #define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);  #else  #define NSLog(FORMAT, ...) nil  #endif | 
2.在OC语言的情况下导入某些头文件
| 1 2 3 |  #ifdef __OBJC__       //导入头文件 #endif | 
3.处理循环引用问题(处理当前类对象)
| 1 |   #define WS(weakSelf)  __weak __typeof(&*self)weakSelf = self; | 
4.获取屏幕宽高
| 1 2 |  #define ScreenWidth [[UIScreen mainScreen] bounds].size.width #define ScreenHeight [[UIScreen mainScreen] bounds].size.heigh | 
5.判断iOS8或更高系统版本(谨慎使用,floatValue是不靠谱的,具体原因请看:http://www.jianshu.com/p/528897755dc8)
| 1 |  #define IOS8UP ([[UIDevice currentDevice].systemVersion floatValue] >= 8) | 
6.设置颜色RGB值
| 1 |  #define RGB(a,b,c) [UIColor colorWithRed:(a/255.0) green:(b/255.0) blue:(c/255.0) alpha:1.0] | 
7.设置颜色RGB值+透明度
| 1 |  #define RGBA(a,b,c,d) [UIColor colorWithRed:(a/255.0) green:(b/255.0) blue:(c/255.0) alpha:d] | 
8.支持横屏
| 1 2 3 4 5 6 7 8 9 |  #if__IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 当前Xcode支持iOS8及以上 #define SCREEN_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.width) #define SCREENH_HEIGHT ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.height) #define SCREEN_SIZE ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?CGSizeMake([UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale,[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale):[UIScreen mainScreen].bounds.size) #else #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height #define SCREEN_SIZE [UIScreen mainScreen].bounds.size #endif | 
9.设置随机颜色
| 1 |  #define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0] | 
10.设置view的圆角边框
| 1 2 3 4 5 | #define LRViewBorderRadius(View, Radius, Width, Color)\\[View.layer setCornerRadius:(Radius)];\[View.layer setMasksToBounds:YES];\[View.layer setBorderWidth:(Width)];\[View.layer setBorderColor:[Color CGColor]] | 
11.获取图片资源
| 1 |  #define kGetImage(imageName) [UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]] | 
12.获取当前语言
| 1 |   #define LRCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0]) | 
13.判断当前的iPhone设备/系统版本
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //判断是否为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] | 
14.判断是真机还是模拟器
| 1 | #if TARGET_OS_IPHONE//iPhone Device#endif#if TARGET_IPHONE_SIMULATOR//iPhone Simulator#endif | 
15.沙盒目录文件
| 1 2 3 4 5 6 | //获取temp#define kPathTemp NSTemporaryDirectory()//获取沙盒 Document#define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]//获取沙盒 Cache#define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject] | 
16.宏与const 的使用
很多小伙伴在定义一个常量字符串,都会定义成一个宏,最典型的例子就是服务器的地址。在此所有用宏定义常量字符的小伙伴以后就用const来定义吧!为什么呢 ?我们看看:
宏的用法:一般字符串抽成宏,代码抽成宏使用。
const用法:一般常用的字符串定义成const(对于常量字符串苹果推荐我们使用const)。
宏与const区别:
1.编译时刻不同,宏属于预编译 ,const属于编译时刻
2.宏能定义代码,const不能,多个宏对于编译会相对时间较长,影响开发效率,调试过慢,const只会编译一次,缩短编译时间。
3.宏不会检查错误,const会检查错误
通过以上对比,我们以后在开发中如果定义一个常量字符串就用const,定义代码就用宏。
| 1 | staticNSString * constloginAccount = @"loginAccount";staticNSString * constloginPassword = @"loginPassword"; | 
17.单例化一个类
| 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 | ////  SynthesizeSingleton.h//  CES#ifndef SynthesizeSingleton_h#define SynthesizeSingleton_h //声明#define DECLARE_SYNTHESIZE_SINGLETON_FOR_CLASS(classname) + (classname *)sharedInstance; //实现#define IMPLEMENT_SYNTHESIZE_SINGLETON_FOR_CLASS(classname)  staticclassname *shared##classname = nil; + (classname *)sharedInstance  {     @synchronized(self)  {  if(shared##classname == nil)  {   shared##classname = [[self alloc] init];  }  }  returnshared##classname;  }   + (id)allocWithZone:(NSZone *)zone  {  @synchronized(self)  { if(shared##classname == nil)  {  shared##classname = [super allocWithZone:zone];  returnshared##classname;  }  }   returnnil;  }  - (id)copyWithZone:(NSZone *)zone {   returnself; } | 
使用方法:在你需要创建单例类的类的.h和.m文件中分别加入以下代码(首先导入以上代码所处的头文件)
| 1 |  DECLARE_SYNTHESIZE_SINGLETON_FOR_CLASS(LoginManager)(.h)声明 IMPLEMENT_SYNTHESIZE_SINGLETON_FOR_CLASS(LoginManager)(.m)实现 | 
标签:
原文地址:http://www.cnblogs.com/gongyuhonglou/p/5855340.html