观“编写高质量iOS与OC 代码的52个有效方法”有感(一)·

2016-12-05  本文已影响420人  大王叫我来巡山_Cong
程序猿.jpg

1、了解Objective-C语言的起源

函数结构:
Object *obj = new Object;
obj->perform(parameter1,parameter2);
特点:运行时的代码由编译器来决定。

struct CGRect {
    CGPoint origin;
    CGSize size;
};
typedef struct CGRect CGRect;

系统框架都在使用结构体。因为使用Objective-C来做的话会影响性能(创建对象、分配内存、释放内存)。如果只是保存int、float、double、char这些“非对象类型” 通常使用CGRect结构体就可以了。

2、在类的头文件中尽量少引入其他头文件

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

    //多种类型的数值
    NSNumber *number = [NSNumber numberWithInt:1];
    
    //数组创建
    NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    
    //字典的创建
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mary",@"name",@"Secr",@"name1" ,nil];

字面量创建

//数值创建
    NSNumber *number = @1;
    int a = 1;
    float b = 4.23f;

    //数组创建
    NSArray *array = @[@"1",@"2",@"3"];
    
    //字典的创建
    NSDictionary *dictionary = @{@"Mary":@"name",@"Secr":@"name1"};

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

extern NSString *const SCNameStringConstant;

.m中

NSString *const SCNameStringConstant = @"Peter";

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

typedef NS_ENUM(NSInteger, UIButtonType) {
    UIButtonTypeCustom = 0,                         // no button type
    UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0),  // standard system button

    UIButtonTypeDetailDisclosure,
    UIButtonTypeInfoLight,
    UIButtonTypeInfoDark,
    UIButtonTypeContactAdd,
    
    UIButtonTypeRoundedRect = UIButtonTypeSystem,   // Deprecated, use UIButtonTypeSystem instead
};

枚举只是一种常量命名方式。每种状态用一个易读的值来表示,这样更方便理解。编译器会为枚举分配一个独有的编号,从0开始,每个枚举递增1。

typedef enum _TTGState {
    TTGStateOK  = 0,
    TTGStateError,
    TTGStateUnknow
} TTGState;

  //指明枚举类型
TTGState state = TTGStateOK;

用的时候就这样:

 - (void)dealWithState:(TTGState)state {
   switch (state) {
       case TTGStateOK:
           //...
           break;
       case TTGStateError:
           //...
           break;
       case TTGStateUnknow:
           //...
           break;
     }
  }
     ```
- 选项:就是说一个“选项变量”的类型要能够同时表示一个或多个组合的选择。
比如说iPhone 可以支持多个方向。

//方向,可同时支持一个或多个方向
typedef enum _TTGDirection {
TTGDirectionNone = 0,
TTGDirectionTop = 1 << 0,
TTGDirectionLeft = 1 << 1,
TTGDirectionRight = 1 << 2,
TTGDirectionBottom = 1 << 3
} TTGDirection;

好处就是我们选项变量可以如下表示:

//用“或”运算同时赋值多个选项
TTGDirection direction = TTGDirectionTop | TTGDirectionLeft | TTGDirectionBottom;

//用“与”运算取出对应位
if (direction & TTGDirectionTop) {
NSLog(@"top");
}
if (direction & TTGDirectionLeft) {
NSLog(@"left");
}
if (direction & TTGDirectionRight) {
NSLog(@"right");
}
if (direction & TTGDirectionBottom) {
NSLog(@"bottom");
}

一般来说,我们不能指定枚举变量的实际类型是什么,就是说,我们不知道枚举最后是int型,还是其他的什么类型。但是从C++ 11开始,我们可以为枚举指定其实际的存储类型。
      enum TTGState : NSInteger {/*...*/};
Foundation框架中定义了一些辅助的宏,这些宏具备了向后兼容的能力(判断编译器是否支持新的枚举特性,不支持就用老的语法来定义枚举)。

- 在iOS程序中,最好所有的枚举都用“NS_ENUM”和“NS_OPTIONS”定义,保证统一。

### 接下来也将会继续整理。如果觉得有用请点个喜欢!
### 您的支持将是我继续写作的动力!谢谢。

[观“编写高质量iOS与OC X代码的52个有效方法”有感(一)· 熟悉Objective-C](http://www.jianshu.com/p/0876e60d3160)
[观“编写高质量iOS与OC X代码的52个有效方法”有感(二)· 对象、消息、运行时](http://www.jianshu.com/p/1aac4fb98888)
[观“编写高质量iOS与OC X代码的52个有效方法”有感(三)· 接口与API设计](http://www.jianshu.com/p/5d9e61db2a01)
[观“编写高质量iOS与OC X代码的52个有效方法”有感(四)· 协议与分类](http://www.jianshu.com/p/0944e1e276ff)
上一篇 下一篇

猜你喜欢

热点阅读