第4部分 由事件驱动的应用

作者: Sober_DeTong | 来源:发表于2017-05-30 17:20 被阅读18次
    第31章 第一个iOS应用

    输入公司标志(Company Identifier)是为了生成Bundle Identifier(程序包标志),它的作用是保证应用在App Store中的唯一性。
    Class Prefix(类名前缀)

    AppDelegate

    创建项目之后,Xcode会自动创建AppDelegate类,称为应用程序委托,它是程序的起点,每个iOS应用都有一个应用程序委托。
    UIWindow 对象构成iOS应用的屏幕。

    Model-View-Controller

    Model-View-Controller(模型,视图,控制器,MVC)是一种设计模式,核心理念是:开发程序时所创建的类,都应该可以归为模型、视图或控制器三种类型。下面对这三种类型做一个简单的介绍。

    • 模型负责保存数据,并能让其他对象访问这些数据。模型不处理用户界面,也无法将自己“画”在屏幕上。模型唯一需要完成的任务是保存并管理数据。苹果公司提供的NSString对象、NSDate对象和NSArray对象都是模型对象。
    • 视图是应用中的可见元素,知道如何在屏幕上画出自己,并相应用户输入。视图和其显示的数据没有直接的关联,也不负责数据的保存和管理。UIView对象和众多的UIView子类对象都是常见的视图对象。
    • 控制器负责执行程序的逻辑功能,以连接和驱动应用的不同组成部分。控制器可以处理事件,并能与应用中的其他对象协同工作。应用中的控制器对象大都需要完成很多烦琐的工作。
    应用委托对象

    iOS应用启动时,会在“幕后”完成大量的设置任务。在这一过程中,程序会创建一个UIApplication实例,用于控制应用的状态。UIApplication实例也是应用和操作系统之间的“联络人”。此外,程序还会创建AppDelegate实例,并将其设置为UIApplication实例的委托对象。这也是为什么这类对象会被称为应用委托对象(app delegate)。
    有的视图对象也是控件(controls)。控件是可以与用户进行交互的视图,例如,按钮、滑块和输入框。
    当屏幕所显示的视图包含这类控件时,其中的某个控件可以成为第一响应对象(first responder)。拥有第一响应对象状态的控件,可以处理来自键盘的文字输入及摇动事件。
    当用户和某个控件产生交互,并且成为第一响应对象时,这个控件就会收到becomeFirstResponder消息。当接受文本输入的控件成为第一响应对象时,屏幕会出现一个键盘。
    成为第一响应对象的对象能够接受来自键盘的输入和摇动时间,并且会保持这一状态,直到另一个UIControl对象成为第一响应对象,或者是自己受到resignFirstResponder消息。

    //  返回保存用户任务数据的文件路径
    NSString *BNRDocPath() {
        NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        return [pathList[0] stringByAppendingString:@"data.td"];
    }
    
    //  将数据保存至文件
    [self.tasks writeToFile:BNRDocPath() atomically:YES];
    //  加载数据
    NSArray *plist = [NSArray arrayWithContentsOfFile:BNRDocPath()];
    
    深入学习:main() 的作用
    int main(int argc, char * argv[]) {
        @autoreleasepool {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }
    

    UIApplicationMain()函数会创建若干对象,使应用得以运行。首先,该函数会创建一个UIApplication类的实例(单利对象)。接着,根据传入的第四个实参(最后一个实参)创建相应的类实例,并将其设置为应用的委托对象。该对象会受到各种应用委托消息,例如,内存过低警告、应用关闭、进入后台运行状态或应用启动完毕。
    以上流程也可以解释程序是如何从main()函数到`application:didFinishLaunchingWithOpt

    第32章 第一个Cocoa应用
    @property (nonatomic) IBOutlet NSTableView *taskTable;
    - (IBAction)addTask:(id)sender;```
    IBOutlet 告诉 Xcode,taskTable指针会通过Interface Builder 而不是编写代码来进行赋值。IBAction 告诉Xcode,addTask:是一个动作方法,会通过Interface Builder 而不是编写代码来配置相应的目标-动作对。
    
    以下是IBAction 的实际定义:
    

    define IBAction void```

    这个语句告诉你 IBAction 会在正式编译前被替换为void。所有 IBAction 关键字都会被替换为void,因为界面控件所触发的动作方法不需要返回值。

    “Outlet”是“对象指针”的另一个名字。
    和 IBAction 不一样,IBOutlet 会在正式编译前彻底消失。

    #define IBOutlet```
    因此,在编译时刻,IBOutlet关键字会被彻底移除,只留下outlet(指针)。

    相关文章

      网友评论

        本文标题:第4部分 由事件驱动的应用

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