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

我的技术博客经常被流氓网站恶意爬取转载。请移步原文: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 = @5;
    NSNumber* floatNumber = @5.2f;
    NSNumber* doubleNumber = @5.27413;
    NSNumber* expressionNumber = @(x*y);

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

    不要用:

    NSArray* animals = [NSArray arrayWithObjects:@"hamster",@"cat",@"dog", nil];
    NSString* hamster = [animals objectAtIndex:0];

     

  3. 要用:
    NSDictionary* animalData = 
       @{@"name" : @"Tom",
         @"age" : @2};
    
    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               = 0,
    HAMAnimalAbilitySing               = 1 << 0,
    HAMAnimalAbilityDance              = 1 << 1,
    HAMAnimalAbilityTalk               = 1 << 2,
    HAMAnimalAbilityRun                = 1 << 3,               
}
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:分支

posted @ 2014-03-01 21:14  戴仓薯  阅读(627)  评论(4编辑  收藏  举报