14、OC 指针变量的强制类型转换

指针变量的强制类型转化同基本数据类型的强制类型转化相同,都是使用类型转化符圆括号。
强制类型转换只改变编译时类型,但该变量所指的对象的实际类型并不会发生改变,所以强制类型转换时可能会出错。
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSObject* obj = @"hello";
        //强制类型转化成NSString
        NSString* str = (NSString*)obj;
        NSLog(@"转换后:%@",str);
       
        NSObject* obj2 = @"hello";
        //强制类型转化成NSArray
        NSArray* arr = (NSArray*)obj2;
        //报错,arr实际指向的是NSString对象
        NSLog(@"转换后:%@",[arr count] );
    }
}


为避免上述错误的产生,在实际开发中,我们建议先判断对象的类型,然后再强制类型转换,判断类型有如下方法:
-(BOOL)isMemberOfClass:(Class)aClass:判断该对象是否是aClass类的实例。
-(BOOL)isKindOfClass:(Class)aClass:判断该对象是否为aClass类或其子类的实例。
+(BOOL)isSubclassOfClass:(Class)aClass:类方法,判断当前类是否为aClass类的子类。
        NSObject* obj = @"Hello";
        //isKindOfClass
        //判断obj是否是NSString类或其子类的实例,输出true
        NSLog(@"%d",[obj isKindOfClass:[NSString class]]);
        //判断obj是否是NSObject类或其子类的实例,输出true
        NSLog(@"%d",[obj isKindOfClass:[NSObject class]]);
        //判断obj是否是NSObject类或其子类的实例,输出false
        NSLog(@"%d",[obj isKindOfClass:[NSArray class]]);
       
       
        //判断NSString是否是NSObject类的子类 输出true
        NSLog(@"%d",[NSString isSubclassOfClass:[NSObject class]]);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值