iOS 小知识
来源:互联网 发布:百度nba球员数据 编辑:程序博客网 时间:2024/04/30 09:51
CGfloat和float的区别?
现在上架的app都要求支持64位系统,那么CGFloat和float的区别就在这里.command+左键点击CGFloat.
1
typedef CGFLOAT_TYPE CGFloat;
这里可以看到CGFloat是CGFLOAT_TYPE的宏定义,那么这个又是什么?
1
2
3
4
5
6
7
8
9
10
11
if defined(LP64) && LP64
define CGFLOAT_TYPE double
define CGFLOAT_IS_DOUBLE 1
define CGFLOAT_MIN DBL_MIN
define CGFLOAT_MAX DBL_MAX
else
define CGFLOAT_TYPE float
define CGFLOAT_IS_DOUBLE 0
define CGFLOAT_MIN FLT_MIN
define CGFLOAT_MAX FLT_MAX
endif
这段话的意思就是,64位系统下,CGFLOAT是double类型,32位系统下是float类型.CGFloat能够保证你的代码在64位系统下也不容易出错,所以你的代码应该尽量使用CGFloat.尽管他可能造成一些多余的消耗.不过能保证安全.
应该使用FOUNDATION_EXPORT还是#define来定义常量?
一般iOS我们定义常量的方法有两种,来看下面例子
我的.h文件
1
2
FOUNDATION_EXPORT NSString * const kMyConstantString;
FOUNDATION_EXPORT NSString * const kMyConstantString2;
.m文件是这样定义的
1
2
NSString * const kMyConstantString = @”Hello”;
NSString * const kMyConstantString2 = @”World”;
还有一种是常用的#define方法了
1
define kMyConstantString @”Hello”
有什么区别呢?
使用第一种方法在检测字符串的值是否相等的时候更快.对于第一种你可以直接使用(stringInstance == MyFirstConstant)来比较,而define则使用的是这种.([stringInstance isEqualToString:MyFirstConstant])
哪个效率高,显而易见了.第一种直接比较的是指针地址,而第二个则是一一比较字符串的每一个字符是否相等.
static inline function是干嘛的?
如果你的.m文件需要频繁调用一个函数,可以用static inline来声明,这相当于把函数体当做一个大号的宏定义.不过这也不是百分之百有效,到底能不能把函数体转换为大号宏定义来用要看编译器心情,它要是觉得你的方法太复杂,他就不转了.他直接调用函数.
类似这种简单函数他肯定是乐意的.
1
static inline CGRect ScaleRect(CGRect rect, float n)
这到底是什么鬼?static void *CapturingStillImageContext = &CapturingStillImageContext;
这种声明方式常用于kvo,用来当做contenxt的key来添加.例如
1
[self addObserver:self forKeyPath:@”stillImageOutput.capturingStillImage” options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) context:CapturingStillImageContext];
这种声明方式可以导致a method to create a unique pointer at compile time.在编译的时候创建一个唯一的指针.因为kvo的时候context如果不小心重复了,会发生奇怪的事情.用这种方式可以避免.
- iOS零碎小知识
- IOS小知识
- IOS开发小知识
- IOS 小知识总结
- ios开发小知识
- iOS开发小知识
- iOS开发小知识
- ios 知识小积累
- iOS中的小知识
- ios 小知识
- iOS后台小知识
- ios小知识
- iOS开发小知识
- ios 小知识集锦
- iOS小知识
- iOS小知识汇总
- iOS 小知识
- iOS 小知识
- 常用快递查询API接口-基于极核数据
- Odoo入门-对象属性、参数
- js全选,不全选,反选
- 阿尔法狗是怎么用机器学习做决策的
- 循环码
- iOS 小知识
- STL里的multimap使用简介
- Python关键字yield的解释
- 查询系统负载信息 Linux 命令详解
- C++ 编译过程中报 error C2039: “div_t”: 不是“`global namespace'”的成员 的错误
- iOS 上滑隐藏navigationbar
- qdebug使用方法
- 做增量备份前的配置
- MyBatis传多个参数的3种方法