当前位置: 首页 > news >正文

iOS开发的一些奇巧淫技3

转自:http://www.cocoachina.com/ios/20150210/11130.html

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如果不小心重复了,会发生奇怪的事情.用这种方式可以避免.

如何快速定位crash的位置?

041.png

选择Add Exception Breakpoint

042.png

这样如果你的app再crash就会自动定位到那句话.

最快速的提升流畅度的方法?

用instrument找出所有不需要透明但是透明的view,layer.全部弄成不透明的.

043.png

选中Profile

044.png

045.png
选中Color Blended Layers

046.png

选择我们最近风生水起的weibo客户端

然后你会看见这些东西。

047.jpeg

048.jpeg

049.jpeg

红色或者深红色的就是透明的层和view,他们就是拖慢你fps的罪魁祸首,如果不需要透明的就改掉.

一个神奇的工具,Accessorizer.

到底叼不叼,看图就知道了.

050.gif

我安装的软件

051.png

 

052.png

053.png

转载于:https://www.cnblogs.com/fisland/p/4307974.html

相关文章:

  • Spring Cloud OAuth 实现微服务内部Token传递的源码解析
  • Swift实现菜单的多选
  • 预防缓存击穿-布隆过滤器
  • Windows下PyQt4的安装
  • jsplumb 使用总结
  • PHP判断变量是否存在及函数isset() 、empty()与is_null的区别
  • [mysql]错误解决之Failed to start MySQL Server
  • CSS3 calc的用法详解
  • MySQL主从复制虽好,能完美解决数据库单点问题吗?
  • 声明25个长度的数组,通过键盘录入学生成绩,并把每个元素赋值为学生的分数成绩,输出结束后遍历输出。...
  • 妈妈走开一会儿
  • 需求的重要性续集
  • 《人月神话》2
  • 7年间减少4000万劳动力,中国企业该何去何从?
  • php图片转base64并保存为文本
  • 08.Android之View事件问题
  • Git的一些常用操作
  • idea + plantuml 画流程图
  • Java知识点总结(JavaIO-打印流)
  • js 实现textarea输入字数提示
  • k8s如何管理Pod
  • LeetCode29.两数相除 JavaScript
  • PHP那些事儿
  • vue自定义指令实现v-tap插件
  • 成为一名优秀的Developer的书单
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 基于HAProxy的高性能缓存服务器nuster
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何设计一个比特币钱包服务
  • 源码安装memcached和php memcache扩展
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • C# - 为值类型重定义相等性
  • Prometheus VS InfluxDB
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • # centos7下FFmpeg环境部署记录
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 数论-逆元
  • $jQuery 重写Alert样式方法
  • (3)(3.5) 遥测无线电区域条例
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转) Face-Resources
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net7 环境安装配置
  • .NET应用架构设计:原则、模式与实践 目录预览
  • @angular/cli项目构建--Dynamic.Form
  • @Not - Empty-Null-Blank