美文网首页
奇巧淫技-2

奇巧淫技-2

作者: AZander | 来源:发表于2018-09-21 17:27 被阅读35次

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

CGfloat和float的区别?

现在上架的app都要求支持64位系统,那么CGFloat和float的区别就在这里.command+左键点击CGFloat.

typedef CGFLOAT_TYPE CGFloat;

这里可以看到CGFloat是CGFLOAT_TYPE的宏定义,那么这个又是什么?

#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文件

FOUNDATION_EXPORT NSString * const kMyConstantString;

FOUNDATION_EXPORT NSString * const kMyConstantString2;

.m文件是这样定义的

NSString * const kMyConstantString = @``"Hello"``;

NSString * const kMyConstantString2 = @``"World"``;

还有一种是常用的#define方法了

#define kMyConstantString @"Hello"

有什么区别呢?

使用第一种方法在检测字符串的值是否相等的时候更快.对于第一种你可以直接使用(stringInstance == MyFirstConstant)来比较,而define则使用的是这种.([stringInstance isEqualToString:MyFirstConstant])

哪个效率高,显而易见了.第一种直接比较的是指针地址,而第二个则是一一比较字符串的每一个字符是否相等.

static inline function是干嘛的?

如果你的.m文件需要频繁调用一个函数,可以用static inline来声明,这相当于把函数体当做一个大号的宏定义.不过这也不是百分之百有效,到底能不能把函数体转换为大号宏定义来用要看编译器心情,它要是觉得你的方法太复杂,他就不转了.他直接调用函数.

类似这种简单函数他肯定是乐意的.

static inline CGRect ScaleRect(CGRect rect, float n)

*这到底是什么鬼?static void CapturingStillImageContext = &CapturingStillImageContext;

这种声明方式常用于kvo,用来当做contenxt的key来添加.例如

[self addObserver:self forKeyPath:@``"stillImageOutput.capturingStillImage" options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) context:CapturingStillImageContext];

这种声明方式可以导致<mark>a method to create a unique pointer at compile time.</mark>在编译的时候创建一个唯一的指针.因为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

相关文章

  • iOS开发的一些奇巧淫技

    iOS开发的一些奇巧淫技 iOS开发的一些奇巧淫技

  • 奇巧淫技-2

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

  • 数组的常用方法

    总结下数组的常用方法和奇巧淫技(奇巧淫技主要是reduce~)。 数组操作首先要注意且牢记splice、sort、...

  • 奇巧淫技-1

    本文摘自:http://www.cocoachina.com/ios/20141231/10783.html bl...

  • Sketchup奇巧淫技

    代开坑

  • Swift 奇巧淫技

    转载至 我的博客[http://csl.cool/2020/02/20/SwiftTips/SwiftTips/]...

  • Jupyter Notebook奇巧淫技

    Jupyter生成ppt 安装完jupyter,打开后,建立新.ipynb文件。 点击view ------ ce...

  • 区块链=奇巧淫技

    区块链最大的问题——不能让人热血沸腾, 不可能产生像马云先生一样豪言,我不懂所以我成功的巨头。 他发端于程序员对垄...

  • JS数组奇巧淫技

    数组操作首先要注意且牢记splice、sort、reverse这3个常用方法是对数组自身的操作,会改变数组自身。其...

  • FFmpeg 中的奇巧淫技

    章节 双视频合并&视频并排显示 视频去除音频 1、双视频合并&视频并排显示 1.1、命令行如下所示: -i 表示输...

网友评论

      本文标题:奇巧淫技-2

      本文链接:https://www.haomeiwen.com/subject/etrznftx.html