1,了解Objective-C语言的起源:

OC为C语言的超集,为C加入了面向对象的特性。

要理解C中的指针和内存模型。

2.在类文件里尽量少引入其它头文件:

引入过多头文件。将借口暴露,添加耦合度。这显然是不可取的。

对于一个类B的声明中调用其它的类A,假设头文件里内容仅仅是简单引用对象,而并不须要知道其全部的接口细节时。不应该引入类A的头文件。而使用forward declaring方式来向前声明该类:

  1. @class A

而假设实现中必须知道接口细节时,再将头文件引入,这样,将引入头文件的时机尽量延后。仅仅在确定须要时才引入。

循环引用会引起死循环。

协议即接口,显然应该放在一个单独的头文件里。

对于不太重要的属性,能够将其放在 class-continuation中。减少在头文件里的内容,以减少编译时间和减少彼此的依赖程度。

3.多用字面量语法,少用与之等价的方法。

对于Foundation框架中的NSString、NSNumber、NSArray、NSDictionary类,对于起创建,一般使用字符串字面量string literal:

  1. NSString *someString = @"a String";
  2. NSNumber *number = @{x * y };
  3. NSArray *animals = @[@"cat",@"dog",@"mouse"];
  4. NSDictionary *personData = @{@"firstName":@"matt",
  5. @"lastname":@"Galloway",
  6. @"age":@28};
  7. NSString *str = personData[@"lastname"];

须要注意的是,对NSDictionary和NSArrary创建时,不应该有nil即空值,由于字面量语法实际上是一种语法糖的语法,即对一定语句的缩减版本号,而这里调用的是不定參数的构造函数,相当于运行下面方法:

  1. NSArray *animals = [NSArray array WithObjects:cat,dog,mouse,nil];

由于在不定參数的函数中以nil结尾。所以假设使用字面量语法。在參数中使用nil就会抛出异常。

使用字面量语法。所用的对象必须是属于Foundation。就是仅仅能对所说的4个,而本身这些对象都是不可变的。

对于起可变版本号即带mutable。仅仅能自行复制一份,例如以下:

  1. NSMutableArray *mutable = [@[@1,@2,@3] mutableCopy] ;

4.多用类型常量,少用#define预处理指令:

C中的陋习。在C++和OC中都有了常量后。就应该使用常量了。

简单来说,长处是带类型。方便检測,加 不会缩小命名空间。

不打算公开某常量的话。就应该将其定义在实现文件里。

使用const static来修饰静态常量。const表示常量。static表示该变量的仅在本编译单元可见,不带static就是全局变量了。

使用extern来修饰全局常量。跟C++和C一样,如今头文件里声明。再在实现文件里定义。针对指针时,放在*号前表示地址是常量,放在*后表示地址指向内容是常量。

5.用枚举表示状态、选项、状态码:

OC中的枚举,编译器自己主动为枚举分配编号,一般从0開始依次递增。实现枚举所用的数据类型取决于编译器。定义枚举变量的方式非常蠢:

  1. enum ABCEnum{
  2. a,
  3. b,
  4. c,
  5. };
  6. enum ABCEnum en = a;

而OC中能够省略这个enum,通过typedef:

  1. typedef enum ABCEnum ABCEnum;

这样,之后就能够使用枚举名来取代完整的enum ABCEnum了。

C++11中能够指明何种“底层数据类型”来保存枚举类型的变量。这样就能够提前声明枚举变量。而在不能指定底层数据类型时,无法向前声明枚举类型的原因是,编译器不清楚底层数据类型的大小,所以无法为变量分配空间,也就无法声明变量。

向前声明指定数据类型例如以下:

  1. enum ABCEnum : NSInteger

当然,在定义枚举时。指定数据类型,也是在枚举名后加入冒号加数据类型。

枚举中能够不是哟个默认的0,自定设定的值,而之后的值就从自定的值開始依次递增:

  1. enum ABCEnum : NSInteger{
  2. A ,
  3. B = 1000,
  4. C ,
  5. };

而一般在使用枚举类型的变量定义选项时,选项是彼此组合的,也就是用到按位或操作 | 时。就要设置枚举值都是合理移位后的值:

  1. enum ABCEnum{
  2. A = 1 << 0,
  3. B = 1 << 1,
  4. C = 1 << 2,
  5. };

这样能够通过或操作来组合多个选项,方便快捷。

在switch中使用枚举时:

  1. switch(abc){
  2. A:
  3. break;
  4. B:
  5. break;
  6. C
  7. break;
  8. }

OC中的switch能够省略case.

Effective OC : 1-5的更多相关文章

  1. OC循环方法推荐-块循环遍历(比for循环好用)

    最近在看一本书<Effective OC 2.0>,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环. 阅读时思考了下块循环是否方便实现内部循环终止外部循环的问题. 于是做 ...

  2. Effective Objective-C 笔记之熟悉OC

    1.在一个类的头文件中尽量少引用其他头文件 如果Person.h 引入了EmployeePerson.h,而后续又有其他类如Human.h又引入了Person.h, 那么EmployeePerson. ...

  3. 读Effective Objective-C [提高OC代码质量总结笔记第一篇:熟悉OC]

    一.OC特性 OC 为 C 语言添加了面向对象特性,是其超集; OC 使用动态绑定的消息结构,也就是,在运行时才会检查对象类型; 接收一条消息后,究竟应执行何种代码,由运行期环境来决定,而非 编译器; ...

  4. 《Effective Objective-C 2.0》 读后总结

    感觉自己最近提升很慢了.然后去找了一些面试题看看.发现自己自大了.在实际开发中,让我解决bug.编写功能,我有自信可以完成.但是对项目更深层的思考,我却没有.为了能进到自己的目标BAT.也为了让自己更 ...

  5. 编写OC高质量的代码的有效方法

    1. 写这个只是为了自己记忆,有相关pdf文件,如需要留下邮箱.. 2. 在类的头文件中尽量少引入其他头文件 除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类( ...

  6. 《Effective Objective-C 2.0》摘要

    前一段时间将<Effective Objective-C 2.0>这本书浏览了一遍,说一下几个觉得比较有意思的知识点. 感觉这本书是ios开发必看的一本书,最基础的,以及稍微高阶一点的oc ...

  7. C C++ OC指针常量和常量指针区别

    看Effective Objective-C 2.0  编写高质量iOS与OS X代码的52个有效方法这本书的时候看到有一个说多用类型常量,少用#define预处理指令 ,在这里面有说到指针常量,之前 ...

  8. Effective Objective-C 的读书笔记

    本文主要是摘录了 <Effective Objective-C 2.0>一书中提到的编写高质量iOS 代码的几个方法. 1 熟悉Objective -C 1.1 OC 起源 OC 为C语言 ...

  9. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

随机推荐

  1. 读取文件和输入——read 脚本命令

    Linux之read命令使用 read命令: read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入 ...

  2. wpf设置某容器透明,而不应用到容器的子元素的方法

    以Border打比方: <Border.Background> <SolidColorBrush Opacity="0.4" Color="Black& ...

  3. POJ 1141 Brackets Sequence(括号匹配二)

    题目链接:http://poj.org/problem?id=1141 题目大意:给你一串字符串,让你补全括号,要求补得括号最少,并输出补全后的结果. 解题思路: 开始想的是利用相邻子区间,即dp[i ...

  4. nginx重写链接

    location ~ /send.redir {             if ( $query_string ~ “url=(?<path>.+)” ) {rewrite ^.* htt ...

  5. sql server 约束 查找

    --1.主键约束 SELECT tab.name AS [表名], idx.name AS [主键名称], col.name AS [主键列名] FROM sys.indexes idx JOIN s ...

  6. hdu 2069 1 5 10 25 50 这几种硬币 一共100个(母函数)

    题意: 有50 25 10 5 1 的硬币 一共最多有100枚 输入n输出有多少种表示方法 Sample Input1126 Sample Output413 # include <iostre ...

  7. CCF CSP 201409-3 字符串匹配

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...

  8. #define const typedef

    #define用法 1. 定义简单的常数:定义常量,便于修改 #define N 1000 2. 定义简单的函数:注意多使用括号 define可以像函数那样接受一些参数,如下: #define max ...

  9. SQLite数据库、ListView控件的使用

    android下数据库的创建(重点) 在Android平台上,集成了一个轻量级嵌入式关系型数据库—SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本 ...

  10. ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?

      ASP.NET MVC 的路由实际上是建立在 ASP.NET 的路由系统之上的. MVC 路由注册通常是这样的: RouteTable 是一个全局路由表, 它的 Routes 静态属性是一个 Ro ...