zoukankan      html  css  js  c++  java
  • Effective Objective-C 2.0之Note.01

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

    除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合(coupling)。

    有时无法使用向前声明(@class 类名)(.h文件在某个类引入类对象,.m实现#import类名),比如要声明某个类遵循一项协议。这种情况下,尽量把“该类遵循某协议”的这条声明移至“class-continuation分类”中。如果不行的话,就把协议单独放在一个头文件中,然后将其引入。

    Note:@class与#import的区别

    1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。

    2.在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。

    3.在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用 @class则不会。

    4.如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。

    所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.


     2.多用字面量语法(创建不可变对象),少用与之等价的方法

    从Objective-C 1.0起,有一种非常简单的方式能创建NSString、NSNumber、NSArray、NSDictionary这样的对象。这就是“字符串字面量”(string literal),其语法如下:

        NSString *someString = @"Effective Objective-C 2.0"; 
    
        NSNumber *intNumber = @1;  
        NSNumber *floatNumber = @2.5f;  
        NSNumber *doubleNumber = @3.14159;  
        NSNumber *boolNumber = @YES;  
        NSNumber *charNumber = @'a'; 
    
        int x = 5;  
        float y = 6.32f;  
        NSNumber *expressionNumber = @(x * y); 
    
        //效果等于是先创建了一个数组,然后把方括号内的所有对象都加到这个数组中
        NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"]; 
        NSString *dog = animals[1]; 
    
        NSDictionary *personData =  
            @{@"firstName" : @"Matt",  
                 @"lastName" : @"Galloway",  
                 @"age"         : @28}; 
        NSString *lastName = personData[@"lastName"]; 
        mutableArray[1] = @"dog";  
        mutableDictionary[@"lastName"] = @"Galloway"; 
    
         //局限性-------使用字面量语法创建出来的字符串、数组、字典对象都是不可变的(immutable)。若想要可变版本的对象,则需复制一份:
    
        NSMutableArray *mutable = [@[@1, @2, @3, @4, @5]mutableCopy];
     
     
     
    如有疑问,共同探讨,共同进步。
  • 相关阅读:
    CSS3 target伪类简介
    不用position,让div垂直居中
    css3 在线编辑工具 连兼容都写好了
    a标签伪类的顺序
    oncopy和onpaste
    【leetcode】1523. Count Odd Numbers in an Interval Range
    【leetcode】1518. Water Bottles
    【leetcode】1514. Path with Maximum Probability
    【leetcode】1513. Number of Substrings With Only 1s
    【leetcode】1512. Number of Good Pairs
  • 原文地址:https://www.cnblogs.com/nielsen/p/4828128.html
Copyright © 2011-2022 走看看