`
linwwwei
  • 浏览: 224388 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iOS开发中那些高效常用的宏(转)

 
阅读更多
//
//  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,"\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


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

转自:http://blog.csdn.net/duxinfeng2010/article/details/9067947
分享到:
评论

相关推荐

    iOS开发中那些高效常用的宏 - 新风作浪的博客专栏 - 博客频道 - CSDN.NET1

    以下是一些iOS开发中的高效常用宏及其详细说明: 1. **Prefix.pch文件**: 在iOS项目中,`Prefix.pch`文件是预编译头文件,它包含的宏定义会在每个源文件被编译之前先被引入。这样可以确保全局使用的宏定义、类别...

    iOS开发中常用的一些宏定义.zip

    以下是一些iOS开发中常用宏定义的知识点: 1. **预处理器宏**:在Objective-C中,`#define`关键字用于创建预处理器宏。它们在编译时被替换为指定的文本,可以用来定义常量、简写复杂表达式或实现条件编译。 2. **...

    iOS常用宏定义framework

    在iOS开发中,框架(Framework)是至关重要的组成部分,它包含了一组相关的库、资源以及接口定义,方便开发者快速构建应用程序。"iOS常用宏定义framework" 提供了一系列预定义的宏和常用类别方法,旨在提高开发效率...

    iOS开发工具类汇总,包含各种常用功能,用简单的宏定义使iOS开发简单、快捷、高效.zip

    在iOS开发中,工具类是开发者常常依赖的代码模块,它们封装了常见任务,使得代码更简洁、可读性更强。这个压缩包“iOS开发工具类汇总”显然提供了一组实用的宏定义,旨在简化iOS应用程序的开发过程,提高开发效率。...

    iOS中常用的宏定义总结

    以下是对iOS中常用宏定义的详细总结: 1. **常量宏**: 常量宏用于定义全局常量,避免了多次计算和内存分配。例如,使用`#define`定义一个PI常量: ```c #define PI 3.14159265 ``` 在代码中直接使用PI即可,...

    CoreEditText:iOS开发工具类汇总,包含各种常用功能,用简单的宏定义使iOS开发简单、快捷、高效

    iOS开发工具类,包含常用功能,为方便使用,特为常用功能封装并且使用宏定义方式运用。在做开发时候能用少点代码就用少点,封装起来的工具类更好用,体积小,使用方便,使开发高效快捷。工具类不定期更新,请关注...

    iOS项目框架搭建

    在iOS开发中,我们常常会使用到第三方库。推荐使用CocoaPods或Carthage进行依赖管理,它们能帮助我们自动下载、链接和更新库,简化项目结构。在Podfile或Cartfile中指定所需库,执行安装命令即可。 五、MVVM(Model...

    聪明的iOS开发者的Xcode使用技巧iOS开发技巧共15

    在iOS开发过程中,Xcode是不可或缺的工具,它集成了代码编辑、编译、调试以及模拟器等功能,为开发者提供了高效的工作环境。本资料“聪明的iOS开发者的Xcode使用技巧”聚焦于提升开发效率和优化开发流程,共计15页...

    IOS项目开发便捷类

    在iOS开发中,可以创建自定义工具类(如CommonUtils),将常用的函数或者功能模块化,减少代码冗余,提高代码复用性。 - 例如,CommonUtils可以包含字符串处理、日期格式化、网络请求、数据存储等常用功能,每个...

    ios中文开发

    Objective-C中有一些与C语言不同的数据类型,这些类型在iOS开发中非常常见。 ##### 1. `-id` 类型 - **定义**:`-id` 是一种特殊的指针类型,它可以指向任何Objective-C的对象。 - **用途**:在Objective-C中,...

    斯坦福大学开放课程:iOS开发教程2010年秋(Lecture 4)

    在本节课程中,我们深入探讨了iOS开发中的几个核心概念和技术,特别是针对Foundation框架内的几个关键类进行了详细的讲解。这包括`NSArray`、`NSDictionary`、`NSSet`以及它们的可变版本——`NSMutableArray`、`...

    iOS开发中常见的项目文件与MVC结构优化思路解析

    在iOS开发中,项目文件的管理和MVC(Model-View-Controller)架构的优化对于提高应用性能和代码可维护性至关重要。本文将深入探讨这些主题,以帮助开发者更好地理解和优化他们的iOS项目。 首先,我们来看看常见的...

    QMUI_iOS:QMUI iOS——致力于提高项目UI开发效率的解决方案

    QMUI iOS是一个致力于提高项目UI开发效率的解决方案,其设计目的是用于辅助快速构建一个本身基本设计还原效果的iOS项目,同时利用自身提供的丰富控件和兼容处理,让开发者能专注不管是新项目的创造,还是已有项目的...

    C++开发在IOS环境下运行的LRUCache缓存功能.docx

    在iOS环境中,C++开发LRUCache(最近最少使用)缓存功能是一项常见的任务,尤其在性能优化和内存管理方面。LRU算法是一种常用的页面替换策略,它将最近最少使用的数据优先淘汰,以保证内存的有效利用。在Xcode中,...

    360九宫格ui设计IOS版本

    提到的"宏定义宽高等等",在iOS开发中,宏定义通常是用预处理器指令`#define`来实现,用于简化代码并提高可读性。例如,可以定义屏幕宽度和高度的宏,以便在布局时使用: ```swift #define SCREEN_WIDTH [UIScreen ...

    IOS面试题2018总结188题

    ### IOS面试题2018总结188题知识点概览...以上内容涵盖了 iOS 开发面试中可能遇到的核心知识点,包括但不限于语言特性、框架使用、设计模式以及系统架构等方面。掌握这些知识点对于成为一名合格的 iOS 开发者至关重要。

    iOS常见宏理解及使用方法

    总结一下,本文详细介绍了`FOUNDATION_EXPORT`、`UIKIT_EXTERN`、`NS_STRING_ENUM`、`NS_EXTENSIBLE_STRING_ENUM`以及`__VA_ARGS__`和`##`等宏的用法,这些都是iOS开发中常用且重要的宏定义。理解和正确使用这些宏...

Global site tag (gtag.js) - Google Analytics