代码之家  ›  专栏  ›  技术社区  ›  Fattaneh Talebi

在objective-c中,不兼容指针类型的类型分配是否总是失败?

  •  0
  • Fattaneh Talebi  · 技术社区  · 7 年前

    @interface ViewController : UIViewController
    
    @property(retain,nonatomic) X1 *testProperty;
    
    @end
    
    // ###############################
    
    @implementation ViewController
    
    @synthesize testProperty;
    
       - (void)viewDidLoad {
          [super viewDidLoad];
    
          testProperty = [X2 new];  --> Warning
          [testProperty printLog];
       }
    }
    


    这个警告很明显,但我的问题是这段代码如何工作正常?它投了吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Gereon    7 年前

    这是因为Objective-C的动态特性。编译器正确地警告您类型不匹配,但在运行时,当它执行 printLog 对于其接收器,它检查对象是否确实知道如何处理此消息。既然你的 X1 和 X2 类实现 打印日志 ,这是有效的。同样,在任何commmon超类中实现的任何消息 和 X2 (所以至少从 NSObject

    Duck Typing “这是ObjC运行时的基础。