OC使用inline替代宏
CG_INLINE void
GCDDelay(int64_t delayInSeconds,dispatch_block_t block){
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(),block);
}
CG_INLINE void
GCDOnce( dispatch_once_t onceToken,DISPATCH_NOESCAPE dispatch_block_t block){
dispatch_once ( &onceToken, block);
}
CG_INLINE CGFloat
WIDTH(){
static CGFloat ScreenWidth;
static dispatch_once_t onceToken;
GCDOnce(onceToken,^{
ScreenWidth = CGRectGetWidth([UIScreen mainScreen].bounds);
});
return ScreenWidth;
};
CG_INLINE CGFloat
HEIGHT(){
static CGFloat ScreenHeight;
static dispatch_once_t onceToken;
GCDOnce(onceToken,^{
ScreenHeight = CGRectGetHeight([UIScreen mainScreen].bounds);
});
return ScreenHeight;
};
CG_INLINE CGRect
SCREEN(){
static CGRect ScreenRect;
static dispatch_once_t onceToken;
GCDOnce(onceToken,^{
if (CGRectIsEmpty(ScreenRect) || CGRectIsNull(ScreenRect)) {
ScreenRect = [UIScreen mainScreen].bounds;
}
});
return ScreenRect;
};
CG_INLINE CGFloat
FontScale(){
static CGFloat FScale;
static dispatch_once_t onceToken;
GCDOnce(onceToken,^{
FScale = 72.0/96.0;
});
return FScale;
};
CG_INLINE CGFloat
SizeScaleX(){
static CGFloat autoSizeScaleX;
static dispatch_once_t onceToken;
GCDOnce(onceToken,^{
autoSizeScaleX = (WIDTH()>480?WIDTH()/320.0:1.0);
});
return autoSizeScaleX;
};
CG_INLINE CGFloat
SizeScaleY(){
static CGFloat autoSizeScaleY;
static dispatch_once_t onceToken;
GCDOnce(onceToken,^{
autoSizeScaleY = (WIDTH()>480?HEIGHT()/568.0:1.0);
});
return autoSizeScaleY;
};
CG_INLINE CGRect
CGLFLMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x *SizeScaleX();
rect.origin.y = y *SizeScaleY();
rect.size.width = width *SizeScaleX();
rect.size.height = height *SizeScaleY();
return rect;
};
CG_INLINE CGPoint
CGPointLFLMake(CGFloat x, CGFloat y)
{
CGPoint pointLFL;
pointLFL.x = x * SizeScaleX();
pointLFL.y = y * SizeScaleY();
return pointLFL;
};
CG_INLINE CGSize
CGSizeLFLMake(CGFloat width, CGFloat height)
{
CGSize sizeLFL;
sizeLFL.width = width* SizeScaleX();
sizeLFL.height = height* SizeScaleY();
return sizeLFL;
};
OC使用inline替代宏的更多相关文章
- c++内联函数解析(inline)
一.基本定义 inline是C++语言中的一个关键字,可以用于程序中定义内联函数,inline的引进使内联函数的定义更加简单.说到内联函数,这里给出比较常见的定义,内联函数是C++中的一种特殊函数,它 ...
- R语言高性能编程,优化(一)
这段时间学习了<R高性能编程>这本书,基于这段时间做的项目实践,总结了一些自己的体会,和大家分享 一.为什么R程序有时候会很慢?1.计算性能的三个限制条件 cpu ram io R代码本身 ...
- C++笔试
个人整理,借鉴网络 1.C和C++中struct的区别 1).C的struct无protect和private属性,C++的有 2).C不能定义函数,C++能 3).C中struct加了typedef ...
- 高效完成R代码
为什么R有时候运行慢? 参考https://www.cnblogs.com/qiaoyihang/p/7779144.html 一.为什么R程序有时候会很慢? 1.计算性能的三个限制条件 cpu ra ...
- iOS OC内联函数 inline的详解
inline 在iOS中的一些框架中,static inline是经常出现的关键字组合. static自不用多说,表示在当前文件中应用,如 static A, 在其它文件中也可以出现static A. ...
- inline用于替代宏函数
在C&C++中 一.inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例: #define ExpressionName(Va ...
- OC 面试问题汇总
OC 问题汇总: 1. 你如何理解 iOS 内存管理 1. new alloc copy retain这些对象我们都要主动的release或者 autorelease 2. 如果是类方法创建的 ...
- const与#define宏常量 , inline与#define
1.预处理 预处理器是在真正的编译开始之前由编译器调用的独立程序.预处理器可以删除注释.包含其他文件以及执行宏替代. 预处理命令(宏定义#define..#undef. 文件包含#include. 条 ...
- OC中修饰符:宏define 常量:const extern
const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...
随机推荐
- 利用正则表达式去掉html代码
using System.Text.RegularExpressions; // 利用正则表达式去掉"<"和">"之间的内容. private st ...
- Spring 实践 -AOP
Spring 实践 标签: Java与设计模式 AOP引介 AOP(Aspect Oriented Programing)面向切面编程采用横向抽取机制,以取代传统的纵向继承体系的重复性代码(如性能监控 ...
- iOS XMPP Framework 中文概述
本篇文章翻译XMPP Framework中的Overview of the XMPP Framework部分 介绍 The framework is divided into 2 parts: 1. ...
- Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)
简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...
- HDU 2176 (Nim博弈 先手取胜方案) 取(m堆)石子游戏
切切水题,放松心情:-D #include <cstdio> + ; int a[maxn]; int main() { //freopen("in.txt", &qu ...
- Kafka的Producer和Consumer源码学习
先解释下两个概念: high watermark (HW) 它表示已经被commited的最后一个message offset(所谓commited, 应该是ISR中所有replica都已写入),HW ...
- Git之 手把手教你使用Git
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- (六)6.11 Neurons Networks implements of self-taught learning
在machine learning领域,更多的数据往往强于更优秀的算法,然而现实中的情况是一般人无法获取大量的已标注数据,这时候可以通过无监督方法获取大量的未标注数据,自学习( self-taught ...
- 【英文】Bingo口语笔记(18) - Cover系列
cover charge 服务费 cover version 翻唱版本 cover the news 头条新闻
- 最冤枉的关键字----sizeof
<h4>一.常年被人误认为函数.</h4> sizeof 是关键字不是函数,其实就算不知道它是否为32 个关键字之一时,我们也可以借助编译器确定它的身份.看下面的例子: int ...