征服iOSiOS 开发每天分享优质文章iOS程序猿

iOS笔记篇-熟悉OC<三>

2016-12-30  本文已影响61人  破晓霜林

前言

首先回顾下前面两篇文章的内容。

第一、 命名和API的设计

1. 为何要注重命名

2. 命名的注意事项

//比如
    Rectangle* aCppRectangle = new Rectangle(5.0f, 10.0f);        //其他语言
    Rectangle* aOcRectangle = [[Rectangle alloc] initWithWidth:5.0f  
                                                        height:10.0f];  //OC语言

3. 设计类的时候尽可能使用不可变对象

也就是最好把一些不必要让外界改变的属性,设置成readonly。虽然根据KVC的特性,外界依然可以通过如下方法来改变数值,绕过了API方法,但是得自己承担可能出现的问题。
此外设置成为readonly对于实现的代码块里面怎么进行属性访问,这个我们可以在"classes-continuatioon"分类里面将其转换成readwrite。
最好不要把可变collection作为属性公开,而应提供相关的方法,以此修改对象中的可变collection。

   [Person setValue:@"Marray" forKey:@"Name"]

4. 调试和异常处理

以下两个在NSObject协议上的方法分别对应于NSLog的打印,以及通过调试器(LLDB)的命令行输出打印。

description
debugDescription

OC语言中异常只用于处理严重的错误(fatal error, 致命错误),那么对其他错误(nonfatal error),OC中所采用的编程规范是令该方法返回nil/0,或者使用NSError,以表明其中错误的发生。

NSError的用法可以封装成三条信息
Error domain: 错误发生的根源,通常用一个全局变量来定义。比如:"处理URL的子系统(URL-handling subsytem)"在从URL中解析或取得数据是出错了,那么久会使用NSURLErroDomain来表示错误范围。
Error code:(错误码,类型为整数),特有的是错误代码。通常也用enum来表示。例如HTTP请求,就可以选用HTTP的状态码,来作为错误码。
User info(用户信息,类型为字典类型),对于错误的本地化描述。或许还含有导致错误发生的另外一个错误,经由此种信息,尅将相关的错误串成一个错误链。

在错误不那么严重的情况,可以指派“委托方法”来处理错误,也可以通过把错误信息放在NSError对象中,经“输出参数”返回给调用者。

5. NSCopying协议

第二、协议和分类

1. 关于协议

协议代理的设计模式可谓老生常谈,这里就不详细论述了,只指出几个重要的点。

[_delegate responsesToSelector:@selector(XXXMethod)]
 struct data{
        unsigned int didReceiveData     : 1;
        unsigned int didFailWithError   : 1;
        unsigned int didUpdateProgresTo : 1;
    }_delegateFlag;
 //从结构体上可以看出didReceiveData均分别是占用1位的二进制位,所以只能取值0或者1,适合存放bool类型

2. 协议活学活用举例

3. 关于分类的优势

a. 使用分类机制可以把类的实现代码划分成多个易于管理的小块。
甚至可以将"私有"的方法归入名字叫做private的分类中,以隐藏实现细节。
b. 使用分类方便调试,比如:将对应的功能归纳到指定的分类,那么到时候编译打包生成的符号表,将会是

 [Person(Property) setCountry:@"China"]; 

很方便可以知道问题的所在区域。
c. 如果某个属性在主接口上声明为"只读",而在类的内部又要用设置方法来设置此属性,那么就在class-continuation中将其拓展为"可读写"
把私有方法原型声明在"class-continuation"分类中。
d. 若是想使用的类,所遵守的协议不为人所知,则可于"class-continuation分类"中声明

4. 使用分类应用的注意事项

  • 给第三方类中添加分类时,总是应该给其名称和方法上加上属于你专用的前缀。
上一篇下一篇

猜你喜欢

热点阅读