美文网首页iOS学习iOS菜鸟级开发
编写高质量的iOS代码(一)

编写高质量的iOS代码(一)

作者: Mustard_Buli | 来源:发表于2016-06-24 15:28 被阅读49次

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

    • 除非真的有必要,否则不要引入头文件(#import)。一般来说,应在某个类的头文件(.h)中使用前向声明(@class)来提及别的类,并在实现文件(.m)中引入那些类的头文件。这样做可以尽量降低类之间的耦合。
    • 有时无法使用前向声明,比如要声明某个类遵循一项协议,这种情况下,尽量把“该类遵循某协议”的这条声明移至“class-continuation分类”中。如果不行的话,就把协议单独放在一个头文件中,然后将其引入。再比如,写的类继承自某个超类,则必须引入定义那个超类的头文件。

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

    • 应该使用字面量语法来创建字符串、数值、数组、字典。与创建此类对象的常规方法相比,这么做更加简明扼要。
    NSString *string = @"test";
    NSArray *array = @[@(1), @(2), @(3)];
    NSDictionary *dictionary = @{@"string": string, @"array": array};
    
    • 应该通过取下标操作来访问数组下标或字典中的键对应的元素。
    NSNumber *number = array[2];  (2)
    NSString *str = dictionary[@"string"];  (test)
    
    • 如果数组与字典对象是可变的(mutable),也可以通过下标修改其中的元素值。
    //标准做法
    [mutableArray replaceObjectAtIndex:1 withObject:@"dog"];
    [mutableDictionary setObject:@"McGrady" forKey:@"lastName"];
    //取下标
    mutableArray[1] = @"dog";
    mutableDictionary[@"lastName"] = @"McGrady";
    
    • 用字面量语法创建数组或字典时,若值中有nil,则会抛出异常。因此,务必确保值里不含nil。
    • 字面量语法的限制,就是除了字符串以外,所创建的对象必须属于Foundation框架才行。并且使用字面量语法创建出来的都是不可变的(immutable),若想要可变版本的对象,则需要复制一份:
    NSMutableArray *mutable = [@[@(1), @(2), @(3)] mutableCopy];
    

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

    • 不要用预处理指令定义常量。这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作。即使有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致。
    #define num @(1)
    NSString *numString = num;
    
    • 在实现文件中使用static const来定义“只在编译单元内可见的常量”(translation-unit-specific constant)。由于此类常量不在全局符号表中,所以无须为其名称前加前缀。
    // EOCAnimatedView.h
    #import <UIKit/UIKit.h>
    @interface EOCAnimatedView : UIView
     - (void)animate;
    @end
    // EOCAnimatedView.m
    #import "EOCAnimatedView.h"
    static const NSTimeInterval kAnimationDuration = 0.3;
    @implementation EOCAnimatedView
     - (void)animte{
           [UIViewAnimateWithDuration:kAnimation animations:^(){
                    //perform animations
           }];
     }
    @end
    
    • 在头文件中使用static const来声明全局常量,并在实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称应加以区隔,通常用与之相关的类名做前缀。
    // EOCAnimatedView.h
    extern const NSTimeInterval EocAnimatedViewAnimationDuration;
    // EOCAnimtatedView.m
    const NSTimeInterval EOCAnimatedViewAnimationDuration = 0.3;
    

    相关文章

      网友评论

        本文标题:编写高质量的iOS代码(一)

        本文链接:https://www.haomeiwen.com/subject/zbbodttx.html