Effective OC : 1-5
1,了解Objective-C语言的起源:
OC为C语言的超集,为C加入了面向对象的特性。
要理解C中的指针和内存模型。
2.在类文件里尽量少引入其它头文件:
引入过多头文件。将借口暴露,添加耦合度。这显然是不可取的。
对于一个类B的声明中调用其它的类A,假设头文件里内容仅仅是简单引用对象,而并不须要知道其全部的接口细节时。不应该引入类A的头文件。而使用forward declaring方式来向前声明该类:
@class A
而假设实现中必须知道接口细节时,再将头文件引入,这样,将引入头文件的时机尽量延后。仅仅在确定须要时才引入。
循环引用会引起死循环。
协议即接口,显然应该放在一个单独的头文件里。
对于不太重要的属性,能够将其放在 class-continuation中。减少在头文件里的内容,以减少编译时间和减少彼此的依赖程度。
3.多用字面量语法,少用与之等价的方法。
对于Foundation框架中的NSString、NSNumber、NSArray、NSDictionary类,对于起创建,一般使用字符串字面量string literal:
NSString *someString = @"a String";
NSNumber *number = @{x * y };
NSArray *animals = @[@"cat",@"dog",@"mouse"];
NSDictionary *personData = @{@"firstName":@"matt",
@"lastname":@"Galloway",
@"age":@28};
NSString *str = personData[@"lastname"];
须要注意的是,对NSDictionary和NSArrary创建时,不应该有nil即空值,由于字面量语法实际上是一种语法糖的语法,即对一定语句的缩减版本号,而这里调用的是不定參数的构造函数,相当于运行下面方法:
NSArray *animals = [NSArray array WithObjects:cat,dog,mouse,nil];
由于在不定參数的函数中以nil结尾。所以假设使用字面量语法。在參数中使用nil就会抛出异常。
使用字面量语法。所用的对象必须是属于Foundation。就是仅仅能对所说的4个,而本身这些对象都是不可变的。
对于起可变版本号即带mutable。仅仅能自行复制一份,例如以下:
NSMutableArray *mutable = [@[@1,@2,@3] mutableCopy] ;
4.多用类型常量,少用#define预处理指令:
C中的陋习。在C++和OC中都有了常量后。就应该使用常量了。
简单来说,长处是带类型。方便检測,加 不会缩小命名空间。
不打算公开某常量的话。就应该将其定义在实现文件里。
使用const static来修饰静态常量。const表示常量。static表示该变量的仅在本编译单元可见,不带static就是全局变量了。
使用extern来修饰全局常量。跟C++和C一样,如今头文件里声明。再在实现文件里定义。针对指针时,放在*号前表示地址是常量,放在*后表示地址指向内容是常量。
5.用枚举表示状态、选项、状态码:
OC中的枚举,编译器自己主动为枚举分配编号,一般从0開始依次递增。实现枚举所用的数据类型取决于编译器。定义枚举变量的方式非常蠢:
enum ABCEnum{
a,
b,
c,
};
enum ABCEnum en = a;
而OC中能够省略这个enum,通过typedef:
typedef enum ABCEnum ABCEnum;
这样,之后就能够使用枚举名来取代完整的enum ABCEnum了。
C++11中能够指明何种“底层数据类型”来保存枚举类型的变量。这样就能够提前声明枚举变量。而在不能指定底层数据类型时,无法向前声明枚举类型的原因是,编译器不清楚底层数据类型的大小,所以无法为变量分配空间,也就无法声明变量。
向前声明指定数据类型例如以下:
enum ABCEnum : NSInteger;
当然,在定义枚举时。指定数据类型,也是在枚举名后加入冒号加数据类型。
枚举中能够不是哟个默认的0,自定设定的值,而之后的值就从自定的值開始依次递增:
enum ABCEnum : NSInteger{
A ,
B = 1000,
C ,
};
而一般在使用枚举类型的变量定义选项时,选项是彼此组合的,也就是用到按位或操作 | 时。就要设置枚举值都是合理移位后的值:
enum ABCEnum{
A = 1 << 0,
B = 1 << 1,
C = 1 << 2,
};
这样能够通过或操作来组合多个选项,方便快捷。
在switch中使用枚举时:
switch(abc){
A:
break;
B:
break;
C:
break;
}
OC中的switch能够省略case.
Effective OC : 1-5的更多相关文章
- OC循环方法推荐-块循环遍历(比for循环好用)
最近在看一本书<Effective OC 2.0>,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环. 阅读时思考了下块循环是否方便实现内部循环终止外部循环的问题. 于是做 ...
- Effective Objective-C 笔记之熟悉OC
1.在一个类的头文件中尽量少引用其他头文件 如果Person.h 引入了EmployeePerson.h,而后续又有其他类如Human.h又引入了Person.h, 那么EmployeePerson. ...
- 读Effective Objective-C [提高OC代码质量总结笔记第一篇:熟悉OC]
一.OC特性 OC 为 C 语言添加了面向对象特性,是其超集; OC 使用动态绑定的消息结构,也就是,在运行时才会检查对象类型; 接收一条消息后,究竟应执行何种代码,由运行期环境来决定,而非 编译器; ...
- 《Effective Objective-C 2.0》 读后总结
感觉自己最近提升很慢了.然后去找了一些面试题看看.发现自己自大了.在实际开发中,让我解决bug.编写功能,我有自信可以完成.但是对项目更深层的思考,我却没有.为了能进到自己的目标BAT.也为了让自己更 ...
- 编写OC高质量的代码的有效方法
1. 写这个只是为了自己记忆,有相关pdf文件,如需要留下邮箱.. 2. 在类的头文件中尽量少引入其他头文件 除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类( ...
- 《Effective Objective-C 2.0》摘要
前一段时间将<Effective Objective-C 2.0>这本书浏览了一遍,说一下几个觉得比较有意思的知识点. 感觉这本书是ios开发必看的一本书,最基础的,以及稍微高阶一点的oc ...
- C C++ OC指针常量和常量指针区别
看Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法这本书的时候看到有一个说多用类型常量,少用#define预处理指令 ,在这里面有说到指针常量,之前 ...
- Effective Objective-C 的读书笔记
本文主要是摘录了 <Effective Objective-C 2.0>一书中提到的编写高质量iOS 代码的几个方法. 1 熟悉Objective -C 1.1 OC 起源 OC 为C语言 ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
随机推荐
- acm专题---KMP模板
KMP的子串长n,模式串长m,复杂度o(m+n),朴素做法的复杂度o((n-m+1)*m) 觉得大话数据结果上面这个讲得特别好 改进版本的KMP leetcode 28. Implement strS ...
- (二)SpringMVC控制器
第一节:@RequestMapping请求映射 第二节:@RequestParam请求参数 第三节:ModelAndView返回模型和视图 第四节:SpringMVC对象属性自动封装 第五节:Spri ...
- 20155225 2016-2017-2 《Java程序设计》第十周学习总结
20155225 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 22章网络 22.1网络概览 22.2超文本传输协议(HTTP) 22.2.1 HTTP请求 ...
- Knockout应用开发指南 应用举例(简单、高级)
Knockout应用开发指南 第八章:简单应用举例(1)http://www.cnblogs.com/TomXu/archive/2011/11/30/2257067.htmlKnockout应用开发 ...
- 学习python绘图
学会python画图 # 使用清华的pip源进行安装sklearn # pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U sciki ...
- SourceTree 3.0.17如何跳过注册进行安装? — git图形化工具(一)
SourceTree 3.0.17个人版本的尝试跳过注册方式好几次都没成功,于是下载了企业版本https://www.sourcetreeapp.com/enterprise. 安装过程: 1.首次点 ...
- python连接hbase
安装HBase HBase是一个构建在HDFS上的分布式列存储系统,主要用于海量结构化数据存储.这里,我们的目标只是为Python访问HBase提供一个基本的环境,故直接下载二进制包,采用单机安装.下 ...
- html-注册邮箱
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Hive(九)Hive 执行过程实例分析
一.Hive 执行过程概述 1.概述 (1) Hive 将 HQL 转换成一组操作符(Operator),比如 GroupByOperator, JoinOperator 等 (2)操作符 Opera ...
- IDEA简单部署MVC项目
本文章主要参考七小栈主的文章,特此说明: 前提 在配置好JDK,配置好Maven,配置链接如下:如何配置Java环境,包括JDK,Maven等 建项目 IEDA中File->New->Pr ...