我的技术博客经常被流氓网站恶意爬取转载。请移步原文: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. ECshop模板机制

    ECshop模板机制整理 模板机制 近期新项目涉及到ECshop的二次开发,趁此良机正好可以对闻名已久的ECshop系统进行深入了解.要了解一个系统,那么该系统的模板机制就是最重要的一环.相关整理如下 ...

  2. NSThead

    每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将 ...

  3. XMPP——Smack[6]离线消息和离线文件的实现

    终篇,三天所学所用,也就这些,如果需要大家要自己去查资料研究研究,功能其实可以很强大的 可惜界面做得不好,一大短处,从大一迄今没整好,主要是个人审美不行,哎 毕业季呀毕业季,明天摆摊卖书,再半月就可能 ...

  4. 64位Ubuntu配置android环境报错(...adb": error=2, 没有那个文件或目录)

    Failed to get the adb version: Cannot run program "/home/jayhomzhou/android/android-sdk/platfor ...

  5. C#-获取datagriview选中行中某一列的值

    获取选中行中某一列的值: int index = dg_Product.CurrentRow.Index; //取得选中行的索引 txt_ProductId.Text = dg_Product.Row ...

  6. CustomViewWith_Image_Text_Video

    CustomViewOfTextVideoImage.rar https://github.com/Grishu/CustomViewWith_Image_Text_Video

  7. android学习日记16--GridView(网格视图)

    一.GridView 1.简述 GridView按照行列来显示图片或文本的一种视图,排列其实有点类似TableLayout布局, 不过和TableLayout还是差别很大的,倒比较像二维的ListVi ...

  8. 详解 MySQL 中的 explain

    来源:persister 链接:http://www.blogjava.net/persister/archive/2008/10/27/236813.html 在 explain的帮助下,您就知道什 ...

  9. insert erase和replace的例子

    9.43 编写一个函数,接受三个string参数s.oldVal和newVal.使用迭代器及insert和erase函数将s中所有oldval替换为newVal.测试程序,用它替换通用的简写形式,如, ...

  10. windows身份验证模式和SQL server身份验证模式 有什么不同

    两个验证方式是有明显不同的. 主要集中在信任连接和非信任连接. windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql不判断sa密码,而仅根据用户的windows权限来进行身份验证 ...