二、Objective-c-项目的注意点

来源:互联网 发布:形容帅哥美女的网络语 编辑:程序博客网 时间:2024/05/21 23:34

1、框架的定义

在ios系统中,将一系列代码封装为动态库,并在其中放入描述其接口的头文件,这样的代码库就叫框架。而我们平常用的由静态库封装的代码库,严格意义上来说不是框架。

2、cocoa框架

在Mac OS系统中叫cocoa框架,在ios系统中叫Cocoa Touch框架。其实cocoa本身并不是框架,它里面集成了创建应用时所必备的框架。

Foundation是ios应用的基础框架,由Objective-C编写的。还有一个与之对应的CoreFoundation框架,它对应C语言的API。

在ios系统中有许多这样的框架对应,它们之间可以”无缝桥接”,即相互转换。

无缝桥接:主要作用是让ios的运行时系统把CoreFoundation的对象当作Objective-C对象,实现非常复杂。

还有一些如下框架:

CFNetwork、CoreAudio、AVFoundation、CoreData、CoreText

使用C底层API的好处是:可以围绕Objective-C的运行时系统提高效率,注意要进行内存管理。ARC只负责Objective-C的内存管理。

UIKit是构建ios平台应用中UI元素的框架,在Mac OS中对应的是AppKit.

3、NSCache缓存网络下载的图片

使用NSCache缓存的优点是:

1、当系统资源耗尽时,它可以自动增减缓存,会删除“最久未使用的”对象。

如果把内存中的图片缓存到字典时,需要手动删减
2、NSCache它是线程安全的,即开发者在不编写加锁的代码下,多个线程可以同时访问NSCache

4、用前缀避免命名空间冲突

Objective-C没有其它语言那种内置的命名空间(namespace)机制,所以命名时容易产生重名的类。可以变相的实现命名空间,为所有名称前都加上适当的前缀,所选的前缀是公司、应用程序或者二者有关联的名称,这样会使命名冲突减少许多。

常量命名规则

若常量局限于某“编译单元(即实现文件)”之内,则在前面加字母k;若常量在类之外可见,则通常以类名为前缀。

5、提供全能的初始化方法

当我们使用某个类时,尽量创建一个全能的初始化方法,在其它的构造方法中调用该全能初始化方法进行初始化。这样可以避免当类的数据结构发生改变时,而导致所有的构造方法都需要修改。

- (instancetype)init {    return [self initWithHeight:0.0 withWidth:0.0];}//全能初始化方法- (ClassA *)initWithHeight:(CGFloat)height withWidth:(CGFloat)width {    if (self = [super init]) {        _width = width;        _height = height;    }    return self;}

6、实现Description方法

该方法的作用是,NSLog打印一个对象时,会自动调用它,输出某个对象的信息。通过重写该方法,可以使打印的信息更随意更全面。

- (NSString *)description {    return [NSString stringWithFormat:@"%f, %f>",  _width, _height];}

debugDescription方法,是我们在lldb调试器下,po一个对象时,输出该对象信息的方法。

- (NSString *)debugDescription {    return [NSString stringWithFormat:@"<%@: %p, %f  %f>", [self class], self, _width, _height];}

7、类的头文件(.h)中尽量少引用其它头文件

当我们把引入的头文件放在类的头文件时,就会引入所有头文件的内容。若持续下去,则要引入许多根本用不到的内容,这样会增加编译的时间。

“向前声明”类,@class,可以解决的问题有:

1、在类的头文件中引用其它头文件造成编译时间长的问题
2、解决两个类头文件相互包含而导致一个类无法正常编译的问题

8、多用类型常量,少用#define宏定义预处理指令

define是编译器在编译时进行文本替换,没有类型。大量用宏定义会导致二进制文件变大。

而常量是共享一段内存空间,就算N处用到,也不会分配N块内存空间。通过static const可以保证常量只在当前文件中可用,且类型不变

#define NUM 0.3static const NSString *id = @"cellId";
原创粉丝点击