美文网首页iOS高级开发iOS Kit
《Effective Objective-C 2.0 编写高质量

《Effective Objective-C 2.0 编写高质量

作者: 小生不怕 | 来源:发表于2019-07-06 14:57 被阅读1次

    第一章 熟悉Objective-C

    第1条:了解Objective-C语言的起源

    • Objective-C由Smalltalk(消息型语言的鼻祖)演化而来,使用的是“消息结构”(messageing structure)而非"函数调用"(functioncalling),这两者之间的区别就像这样:
     // Messaging (Objective-C)
    Object *obj = [Object new];
    [obj performWith: parameter1 and: parameter2];
    
    // Function calling (C++)
    Object *obj = new Object;
    obj->perform(parameter1, parameter2);
    
    • Objective-C 为C语言添加了对象特性,是其超集。Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息之后,究竟应执行何种代码,由运行期环境而非编译器来决定。
    • Objective-C语言中的指针是用来指示对象的,声明一个变量,令其指代某个对象的语法基本上是照搬C语言的。
    NSString *someString = @"The string";
    

    变量someString指向分配在堆里的某块内存,其中含有一个NSString的对象"The string"。另外Objective-C的对象分配总是分配在"堆空间"(heap space)中,有些不含有*的变量,它们可能会使用栈空间(stack space),例如CGRect类型的分配。而这些分配在"堆空间"的对象,需要内存管理(现在不用手动管理了)。

    第2条:在类的头文件中尽量少引入其他的头文件

    • 当不需要知道某个类的全部细节时,用@class TheClass,来替代#import "TheClass.h", 这叫做“向前声明”(forward declaring)该类。@class的使用既可以减少不必要的导入,也可以避免头文件因互相import而编译通不过。
    // EOCPerson.m
    # import "EOCPerson.h"
    // # import "EOCEmployer.h"
    
    @class EOCEmployer;
    
    @interface EOCPerson : NSObject
    @property (nonatomic, strong) EOCEmployer *employer;
    
    @end
    
    

    将引入的头文件时机尽量延后,只在确有需要时才引入,这样就可以减少类的使用者所需引入的头文件数量, 减少编译时间。

    # import "ViewController.h"
    # import "EOCPerson.h"
    # import "EOCEmployer.h"
    
    @interface ViewController()
    
    @end
    
    @implementation
    
    - (void)viewDidload {
         [super viewDidload];
         EOCPerson *person = [EOCPerson new];
         EOCEmployer *employer = [EOCEmployer new];
         employer.name = "Coder"; // 如果没有 # import "EOCEmployer.h"会编译报错
         person.employer = employer;
    }
    
    @end
    
    
    • 声明类遵循某个协议时,最好把协议单独放在一个头文件中,再来导入。然而有些协议,例如“委托协议”(delegate protocol),就不用单独写一个头文件了。在那种情况下,协议只有与接收协议委托的类放在一起定义才有意义。

    持续更新。。。

    相关文章

      网友评论

        本文标题:《Effective Objective-C 2.0 编写高质量

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