zoukankan      html  css  js  c++  java
  • 【Object-C】指针变量强制类型转换

    除了id类型外,指针变量只能调用它编译时类型的方法。而不能调用它运行时类型的方法,即使它实际所指向的对象包含该方法。如果需要让这个指针变量调用运行时类型的方法,就需要强制类型转换。
    #import <Foundation/Foundation.h>
    int main(int argc, const char * argv[]) {
       
     @autoreleasepool {
           
     // insert code here...
           
     NSLog(@"Hello, World!");
         
           
     NSObject* obj = @"Hello";
           
     // 由于obj变量所指向的对象是NSString对象,所以运行时也可通过
           
     NSString* objStr = (NSString*)obj;
           
     NSLog(@"%@" , objStr);
           
     // 定义一个obj2变量,编译类型为NSObject,实际类型为NSString
           
     NSObject* obj2 = @"iOS";
           
     // 尝试将obj2强转为NSDate,这行代码没有任何问题
           
     // 但程序只是定义一个NSDate类型的指针,该指针与obj2指向同一个对象
           
     NSDate* date = (NSDate*)obj2;
           
     // 程序调用dateisEqualToDate:方法。
            // 由于date的编译时类型是NSDate,因此编译时没有任何问题
            // 由于date实际指向的对象是NSString,因此程序执行时就会引发错误(可以自行测试下一行代码)
           // NSLog(@"%d" , [date isEqualToDate:[NSDate date]]);
           
        }
       
     return 0;
    }
    ==>>
    2014-11-29 15:22:17.215 强制类型转换[1113:303] Hello, World!
    2014-11-29 15:22:17.217 强制类型转换[1113:303] Hello

    出现以下错误:
    -[__NSCFConstantString isEqualToDate:]: unrecognized selector sent to instance 0x100001090
    2014-11-29 15:25:26.893 强制类型转换[1125:303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString isEqualToDate:]: unrecognized selector sent to instance 0x100001090'


  • 相关阅读:
    [cocos2dx 3.0 + xcode]疑难点记录
    [转]全球付虚拟卡申请流程~
    [转]全球付虚拟卡申请开发者账号的流程~
    [cocos2d-x3.0]Android+NDK+Eclipse环境搭建及编译步骤~
    Torque2D MIT 学习笔记(27) ---- ImageFont的使用以及字体ImageAsset的工具生成
    关于拒绝测试驱动开发(NoTDD)
    工作两年随感
    一个Java应用,三种字体风格(Java, Windows, Mac),真是蛋疼
    看看这蛋疼的Java代码
    Bash实用技巧:同时循环两个列表
  • 原文地址:https://www.cnblogs.com/shujucn/p/7481469.html
Copyright © 2011-2022 走看看