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 ...
随机推荐
- django 外键 ,django __
data sqlite> select * from author; id name age 1 jim 12 2 tom 11 sqlite> select * from book; i ...
- 第八篇 EBS实现企业日常业务运管模型的解决方案设计思路
常业务运管模型企业有大有小,各行各业,千差万别,但,其日常业务运管也有相通之处,以典型的制造企业为例,其日常业务运管模型如下图所示: (1)企业日常业务运管模型在市场经济条件下,一个生产型 ...
- URAL1057. Amount of Degrees(DP)
1057 简单的数位DP 刚开始全以2进制来算的 后来发现要找最接近x,y值的那个基于b进制的0,1组合 #include <iostream> #include<cstdio&g ...
- LA 3902 Network
人生第一道图论题啊,有木有 题意: 有一个树状网络,有一个原始服务器s,它的服务范围是k 问至少再放多少台服务范围是k的服务器才能使网络中的每个节点都被覆盖掉 解法: 我们以原始服务器为根将其转化成一 ...
- Windows下PhpStorm结合WAMP开发Phalcon应用的配置
最近要利用Phalcon框架开发PHP应用,因为以前基本没接触过PHP更没用过PHP框架,结果整环境整IDE配置什么的花了好长时间 学习慕课网上的PHP入门教程安装了WAMP(windows+apac ...
- Android隐藏虚拟按键,关闭开机动画、开机声音
/*********************************************************************** * Android隐藏虚拟按键,关闭开机动画.开机声音 ...
- 聊聊Oracle 11g的Snapshot Standby Database(上)
Oracle 11g是Data Guard的重要里程碑版本.在11g中,Active DataGuard.Advanced Compression等特性大大丰富了Data Guard的功能和在实践领域 ...
- Bootstrap--全局CSS样式之栅格系统
Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin 用于生成更具 ...
- 关于RF 315MHz
1.https://www.pjrc.com/teensy/td_libs_VirtualWire.html These modules worked very reliably when sitti ...
- 开发者必读jQuery Mobile入门教程
你每天都会对着它讲话,和它玩游戏,用它看新闻——没错,它就是你裤兜里的智能手机.android,黑莓还是iphone?为了让你清楚意识到究竟哪些才算是智能手机,我在下面总结了一个智能手机系统/设备的列 ...