指针变量的强制类型转换(接继承/多态之后)

自我总结:

1、前面我们学过了基本的强制类型转换,运算符就是一个圆括号()  如:(type*)variable;

2、这种强制类型转换只是改变了该指针变量的编译时的类型,但该变量所指向对象的实际类型并不会发生任何改变,如果我们不加以判断,转换出来的变量在调用时就会出错。


开始:

下方通过一个程序详细的说明:

//
//  main.m
//  指针变量的强制类型转换
//


#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSObject *obj = @"hello";
        //由于obj变量所指向的对象是NSString对象,所以运行时能通过;
        NSString *objStr = (NSString *)obj;
        NSLog(@"%@",objStr);
        
        //定义一个obj2变量,编译类型为NSObject,实际类型为NSString
        NSObject *obj2 = @"hello2";
        //尝试将obj2强制转换为NSDate,这行代码没有任何问题
        //但程序只是定义一个NSDate类型的指针,该指针与obj2指向同一个对象
        NSDate *date = (NSDate *)obj2;
        //程序调用date的isEqualToDate方法
        //由于date编译时类型是NSDate,因此编译时没有任何问题
        //由于date实际指向的对象是NSString,因此程序执行时就会发生报错
        NSLog(@"%d",[date isEqualToDate:[NSDate date]]);
//        加上上方这行就会报错
//        2016-02-14 16:09:03.823 指针变量的强制类型转换[3227:1045399] -[__NSCFConstantString isEqualToDate:]: unrecognized selector sent to instance 0x100001090
//        2016-02-14 16:09:03.824 指针变量的强制类型转换[3227:1045399] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString isEqualToDate:]: unrecognized selector sent to instance 0x100001090'

        
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值