美文网首页
奇巧淫技-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

    相关文章

      网友评论

          本文标题:奇巧淫技-2

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