• iOS runtime 运行时(


    谈到运行时,相对应的就有编译时;

    1).运行时-- 直到程序运行时才去确定一个对象的具体信息,并且可以改变这个类的具体信息,包括它的方法,变量等等;

    2).编译时-- 是在程序运行之前,编译的时候,就确定了这个对象的具体信息,并且不可改变

    先来说说,运行时,确定一个对象的具体信息的例子

    NSString *str = [NSArray arrayWithObject:@"3"];
    NSLog(@"%ld",str.length);

    这两句 代码,在Xcode里是可以编译成功,不会报错,但会有警告,运行的时候会崩溃,这就体现了,运行时 才会确定str 这个指针指向的对象的类型

    编译时,str 是被当做 字符串 来进行处理的,运行的时候,就要访问str真正指向的对象,数组,所以 数组调用 length 的方法,就会抛出一个找不到该方法的异常,崩溃掉了呢

    再举一个例子:

    #import <Foundation/Foundation.h>
    @interface RTObj :NSObject
    -(void)sort;
    @end
    #import "RTObj.h"
    @implementation RTObj
    @end

    这样的一个类,.h 文件里声明了一个方法,.m 里并没有实现这个方法,.m 会有一个提示的警告

    如果我这样 编写代码

    RTObj *obj = [[RTObj alloc] init];
    [obj sort];

    这两句代码在编译时,程序运行之前是不会有任何问题的,警告都不会存在,但是运行的时候,会因为找不到这个方法 而崩溃

    这样我们就简单的了解了下 运行的时候 确定 这个对象的 具体信息的概念,希望对大家有帮助,下一篇文章我们会探讨 改变!

  • 相关阅读:
    GitLab备份与恢复
    内网穿透frp
    Python Day21-22(Django进阶)
    Python Day19-20(Django基础)
    Python Day18(Django初识)
    Python Day17(jQuery)
    Python day16(JavaScript)
    Python Day15(CSS)
    Unity组件
    关于游戏
  • 原文地址:https://www.cnblogs.com/fengmin/p/5319089.html
Copyright © 2020-2023  润新知