我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3575599.html,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。

第2条:在类的头文件中尽量少引入头文件

1. 常规情况:

在.h文件中:(写在@interface之前)

@class SomeClass;

在.m文件中:

#import "SomeClass.h"

2. 必须在.h中引入头文件的情况:

  1. 类继承某个超类
  2. 类实现某个协议

第3条:尽量使用“字面量语法(literal syntax)”

  1. 要用:

    NSNumber* intNumber = @;
    NSNumber* floatNumber = @5.2f;
    NSNumber* doubleNumber = @5.27413;
    NSNumber* expressionNumber = @(x*y);

    不要用:

    NSNumber* someNumber = [NSNumber numberWithInt:];
  2. 要用:
    NSArray* animals = @[@"hamster", @"dog", @"cat"];
    NSString* hamster = animals[]; NSMutableArray* mutableArray = [@[@"hamster", @"dog", @"cat"]mutableCopy];
    mutableArray[] = @"hamster";

    不要用:

    NSArray* animals = [NSArray arrayWithObjects:@"hamster",@"cat",@"dog", nil];
    NSString* hamster = [animals objectAtIndex:];
  3. 要用:
    NSDictionary* animalData =
    @{@"name" : @"Tom",
    @"age" : @}; NSString* name = animalData[@"name"];
    animalData[@"name"] = @"Jerry";

第4条:定义常量少用#define

1. 只在这个类内部使用

在.m文件中:(写在@implementaion之前)

static const double kSomeNumberConstant = 5.274;
static NSString* const kSomeStringConstant = @"hamster";

加字母k作为前缀。

2. 可能在类之外使用

在.h文件中:(写在@interface之前)

extern NSString* const HAMMyClassSomeStringConstant;

在.m文件中:(写在@implementation之前)

NSString* const HAMMyClassSomeStringConstant = @"hamster";

加类名作为前缀。

第5条:使用枚举类型

1. 写法——单独使用

定义:

enum HAMAnimalState : NSInteger {
HAMAnimalStateSleeping,
HAMAnimalStateEating,
HAMAnimalStateDoingNothing,
};
typedef enum HAMAnimalState HAMAnimalState;

其中指定类型的 : NSInteger 可加可不加。加了的可以前向声明。

使用:

HAMAnimalState state = HAMAnimalStateSleeping;

2. 写法——组合使用

定义:

enum HAMAnimalAbility {
HAMAnimalAbilityNone = ,
HAMAnimalAbilitySing = << ,
HAMAnimalAbilityDance = << ,
HAMAnimalAbilityTalk = << ,
HAMAnimalAbilityRun = << ,
}
typedef enum HAMAnimalAbility HAMAnimalAbility;

使用:

//ability to both sing and dance
HAMAnimalAbility ability = HAMAnimalAbilitySing | HAMAnimalAbilityDance;
if (ability & HAMAnimalAbilitySing){
//has ability to sing
}

3. 适合使用枚举类型的场合

  1. 某个对象的各种状态,如StateDisconnected, StateConnecting, StateConnected
  2. 表示选项(可能多选),如PermittedDirectionUp, PermittedDirectionDown, PermittedDirectionLeft
  3. 状态码
  4. 样式,如某个UI元素的不同样式

4. switch枚举类型时,不要加default:分支

[Effective Objective-C 读书笔记] 第1章 几条基本写法 (2~5条)的更多相关文章

  1. [Effective Java 读书笔记] 第三章类和接口 第十六条

    第十六条 复合优先于继承 如果不确定B和A的关系是,is-a的关系,B确实也是A,那么久不应该使用B继承A,否则会暴露实现细节, 你的实现都会限制在原始的实现上. 书中举的第一个例子,实现了一个类ex ...

  2. [.NET] 《Effective C#》读书笔记(二)- .NET 资源托管

    <Effective C#>读书笔记(二)- .NET 资源托管 简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内 ...

  3. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  4. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

  5. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  6. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  7. 《LINUX内核设计与实现》第三周读书笔记——第一二章

    <Linux内核设计与实现>读书笔记--第一二章 20135301张忻 估算学习时间:共2小时 读书:1.5 代码:0 作业:0 博客:0.5 实际学习时间:共2.5小时 读书:2.0 代 ...

  8. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

  9. 《Linux内核设计与实现》第五周读书笔记——第十一章

    <Linux内核设计与实现>第五周读书笔记——第十一章 20135301张忻 估算学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 实际学习时间:共3.0小时 读书: ...

  10. 《Linux内核设计与实现》读书笔记——第五章

    <Linux内核设计与实现>读书笔记--第五章 标签(空格分隔): 20135321余佳源 第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限 ...

随机推荐

  1. Sql sp_executesql 参数问题

    DECLARE @name NVARCHAR(30), @sql NVARCHAR(300)set @sql= N'SELECT TOP 1 @n=EmpName from dbo.Emp' exec ...

  2. JavaScript要点 (三) 保留关键字

    在 JavaScript 中,一些标识符是保留关键字,不能用作变量名或函数名. JavaScript 标准 所有的现代浏览器完全支持 ECMAScript 3(ES3,JavaScript 的第三版, ...

  3. hadoop安装与WordCount例子

    1.JDK安装 下载网址: http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html  ...

  4. Swipe2.1更新——移动Web内容滑块

    Swipe JS 是一个轻量级(3.7 kb) mobile slider,支持 1:1 触摸移动(基于精确的触摸位置的内容滑动). 但是我使用一段时间后发现两个bug,所以在官方2.0(官网http ...

  5. [Practical Git] Filter commit history with git log arguments

    In the last lesson, we learned how to format the git log output; in this lesson we will learn how to ...

  6. mysql优化--博森瑞

    http://blog.itpub.net/28916011/viewspace-1758440/ 现在说一下mysql的内存和I/O方面的两个特点. 一. mysql内存特点: 1.  也有全局内存 ...

  7. 5.6 太多分区引起OOM

    一个月之前,Scott和同事们发现公司有一个MySQL MHA集群的master(假设master机器名为hostA)每隔一周左右就会挂一次(指MySQL挂掉),在几周内,MHA来回切了好几次. 按照 ...

  8. Android 导入导出CSV,xls文件 .

    1 . http://www.bangchui.org/read.php?tid=62 2 .http://blog.csdn.net/xinzheng_wang/article/details/77 ...

  9. LINUX系统备份

    LINUX系统备份 =========================================================== 作者: gswwgph(http://gswwgph.itp ...

  10. java_泛型(构造器)部分实例

    package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; class ...