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的位置?

选择Add Exception Breakpoint

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

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

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

选中Profile


选中Color Blended Layers

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

然后你会看见这些东西。

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

一个神奇的工具,Accessorizer.

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

我安装的软件

时间: 2024-10-22 08:58:42

iOS开发的一些奇巧淫技3的相关文章

iOS开发的一些奇巧淫技(转载)

iOS开发的一些奇巧淫技 http://www.cocoachina.com/ios/20141229/10783.html iOS开发的一些奇巧淫技2 http://www.cocoachina.com/ios/20141229/10801.html iOS开发的一些奇巧淫技3 http://www.cocoachina.com/ios/20150210/11130.html 2011斯坦福大学iOS应用开发视频教程笔记 http://blog.csdn.net/column/details/

iOS开发的一些奇巧淫技1&2

转自:http://www.cocoachina.com/ios/20141231/10783.html TableView不显示没内容的Cell怎么办? 类似这种,我不想让下面那些空的显示. 很简单. 1 self.tableView.tableFooterView = [[UIView alloc] init]; 试过的都说好. 加完这句之后就变成了这样. 自定义了leftBarbuttonItem左滑返回手势失效了怎么办? 1 2 3 4 5 6     self.navigationIt

[转]iOS开发的一些奇巧淫技1.2.3

1.http://www.cocoachina.com/ios/20141231/10783.html 2.http://www.cocoachina.com/ios/20141229/10801.html 3.http://www.cocoachina.com/ios/20150210/11130.html 1和2有几个重复的.

iOS开发的一些奇巧淫技

http://blog.csdn.net/Dwarven/article/details/42388711 TableView不显示没内容的Cell怎么办? 类似这种,我不想让下面那些空的显示. 很简单. [objc] view plaincopy self.tableView.tableFooterView = [[UIView alloc] init]; 试过的都说好. 加完这句之后就变成了这样.   自定义了leftBarbuttonItem左滑返回手势失效了怎么办? [objc] vie

iOS开发的一些奇巧淫技2

能不能只用一个pan手势来代替UISwipegesture的各个方向? 1 - (void)pan:(UIPanGestureRecognizer *)sender 2 { 3 4 typedef NS_ENUM(NSUInteger, UIPanGestureRecognizerDirection) { 5 UIPanGestureRecognizerDirectionUndefined, 6 UIPanGestureRecognizerDirectionUp, 7 UIPanGestureR

octave之奇巧淫技向量化计算实现寻找样本点所属聚类下标

前面有文章提到过,K-means算法,第一步骤是找出样本点的的所属聚类.下面用两种方式实现,一种是普通的循环,一种是完全向量化计算. 假设 : X 是m×n样本矩阵,其每一行是一个样本,m表示样本数目,n表示特征数目: centroids是K×n矩阵,K表示聚类数目,n表示特征数目,每一行是一个聚类的中心. idx是m×1矩阵,idx(i) 表示第i个样本所属的聚类下标.(取值范围 1..K ) 半循环半向量化方式 实现: 思想:循环遍历每一个样本点,计算每一个样本点距离K个聚类中心的值,并取最

Objective-C 奇巧淫技--delegate挂钩

Objective-C 奇巧淫技–delegate挂钩 奇技淫巧 指过于奇巧而无益的技艺与制品. 需求说明 在实际的编程过程中,我们总要定制一些控件,在定制的过程里,有时喜欢自己实现部分delegate方法 // MYScrollView.m - (instancetype)init { ... self.delegae = self; ... } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"%s 我被执行&q

iOS开发--一些奇巧淫技

iOS的一些小技巧 TableView不显示没内容的Cell怎么办? 类似这种,我不想让下面那些空的显示. 很简单. self.tableView.tableFooterView = [[UIView alloc] init]; 试过的都说好. 加完这句之后就变成了这样. 自定义了leftBarbuttonItem左滑返回手势失效了怎么办? self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage

iOS调试奇巧淫技(一)

你以为,你以为的就是你以为的吗? 你以为你代码写的很OK啦? 你以为你的是大牛啦? 你以为的就是你以为的吗? 你的代码经得起考验吗?(PS:爱经得起考验吗) iOS调试的技巧很多,通过调试我们不仅可以迅速找到Bug的所在,更能优化代码,让你的你以为不再是你以为! 一.断点 普通断点 当运行时遇到断点会停止下来供程序员调试 我们清晰的看到此时的i依旧等于0,该函数在一个名为ViewController中 上图中有五个可选按钮 分别是取消断点按钮.继续执行一步按钮.步入按钮.步出按钮 条件断点 点击