动态类型检查

——————————————————————————————


 // 判断实例是否为某个类型的对象或该类型的子类的对象

    /*

    id sub = [MySub new];

    sub = [NSObject new];


    BOOL isTrue1 = [sub isKindOfClass:[MySub class]];



    // 判断某个实例是否为某个类的实例对象

    /*

    id sub = [MySub new];


    BOOL isTrue1 = [sub isMemberOfClass:[MySub class]];


    // 判断类型是否为某个类的子类

    // MyBase, MyClass, MySub

    /*

    BOOL isTrue1 = [MyClass isSubclassOfClass:[MyBase class]];

  

——————————————————————————————

发消息的本质



 // 如果有一个对象 obj, 向这个对象发送一个消息 msg

        

        // [obj msg]

        

        // 怎么实现响应

        

        // 方法响应的顺序

        //  1, 首先根据 obj 所指向的内存中的 isa 找到该类型的代码区

        //  2, 找该类型是否提供了 与消息名 一致的方法

        //  3, 如果有这个方法, 那么就执行这个方法, 也就是响应

        //  4, 如果本类型中没有这个方法, 就向父类型去找

        //  5, 如果有旧调用, 如果没有再向其父类去找, 直到 NSObject

        //  6, 还没有找到, 就有错误

        

        // performSelector

        // 发送消息可以使用语法  [obj msg]

        // 也可以使用方法完成  [obj performSelector:@selector(msg)]

        

        

        // 提供一个父类, 里面声明一个方法, 但是没有实现

        // 提供一个子类, 没有声明方法, 但是实现了方法

        // 结果使用 父类 *base = [子类 new];

        // 然后可以使用 base 调用这个方法

        

        // 重写方法的时候, 子类不需要声明了




      

        // 判断这个类是否有这个方法

        BOOL isTrue1 = [MyBase instancesRespondToSelector:sele];



——————————————————————————————



        // 使用格式化控制字符串, %@ 的功能是专门打印对象的

        // 也就是说 %@ 是一个对象类型数据的占位符

        // 也就是说, 任意的一个对象都可以转换成一个字符串

        

        // 系统在实行 %@ 的时候会自动的调用对象的 description 方法

        // 因此如果需要显示出自己独有的字符串格式, 只需要重写该方法即可

        


// 重写 description 方法

- (NSString *)description {

    return [NSString stringWithFormat:@"姓名:%@, 年龄:%d, 性别:%@", _name, _age, _gender];

}





——————————————————————————————

 // NSString *str1 = @"123";

        // 字面量在编译的时候, 就会编译到文件中, 在程序运行的时候

        // 字面量会加载到内存中的常量区, 换句话说, 字面量不会单独开辟内存

        // 空间, 来初始化一个新的字符串

        

        // NSString *str2 = [[NSString alloc] initWithFormat:@"%d", 123];

        // 首先经过 alloc 开辟内存, 清空内存

        // 在执行那个构造方法, 初始化字符串

        

        

        // NSLog(@"%p", str1);

        // NSLog(@"%p", str2);







——————————————————————————————



——————————————————————————————



——————————————————————————————



——————————————————————————————


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值