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 ...
随机推荐
- 读取文件和输入——read 脚本命令
Linux之read命令使用 read命令: read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入 ...
- wpf设置某容器透明,而不应用到容器的子元素的方法
以Border打比方: <Border.Background> <SolidColorBrush Opacity="0.4" Color="Black& ...
- POJ 1141 Brackets Sequence(括号匹配二)
题目链接:http://poj.org/problem?id=1141 题目大意:给你一串字符串,让你补全括号,要求补得括号最少,并输出补全后的结果. 解题思路: 开始想的是利用相邻子区间,即dp[i ...
- nginx重写链接
location ~ /send.redir { if ( $query_string ~ “url=(?<path>.+)” ) {rewrite ^.* htt ...
- sql server 约束 查找
--1.主键约束 SELECT tab.name AS [表名], idx.name AS [主键名称], col.name AS [主键列名] FROM sys.indexes idx JOIN s ...
- hdu 2069 1 5 10 25 50 这几种硬币 一共100个(母函数)
题意: 有50 25 10 5 1 的硬币 一共最多有100枚 输入n输出有多少种表示方法 Sample Input1126 Sample Output413 # include <iostre ...
- CCF CSP 201409-3 字符串匹配
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...
- #define const typedef
#define用法 1. 定义简单的常数:定义常量,便于修改 #define N 1000 2. 定义简单的函数:注意多使用括号 define可以像函数那样接受一些参数,如下: #define max ...
- SQLite数据库、ListView控件的使用
android下数据库的创建(重点) 在Android平台上,集成了一个轻量级嵌入式关系型数据库—SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本 ...
- ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?
ASP.NET MVC 的路由实际上是建立在 ASP.NET 的路由系统之上的. MVC 路由注册通常是这样的: RouteTable 是一个全局路由表, 它的 Routes 静态属性是一个 Ro ...