如果我们将自定义对象类型转换为id,会发生什么
我遇到了分配id不兼容类型的问题Myclass* __Strong
工作代码:
self.delegate=(id)mycustomobject;
然后我输入了我的对象,id一切都很好,并且作为一种魅力。
但我的问题是以后是否会有任何意外出现的问题。如果是这样,避免此类警告的最佳方法是什么。
要回答您问题的第一部分,如果您将一个对象分配给id您的对象将在编译时范围内失去类关联,这意味着如果您的myProp类NSString中有一个类型的属性名称MyClass并且您执行类似的操作
id tempVar = (id)objMyClass;
那么您将无法myProp在编译时访问该属性。
NSString *propValue = tempVar.myProp; // This will throw an error "Property not found".
要解决您在分配对象时遇到问题的原因是因为您将属性声明为符合协议 delegate的类型,例如idMyClassProtocol
@property (nonatomic,assign) id<MyClassProtocol> delegate;
但是,您还没有遵守MyClassProtocol您的班级MyClass。因此,当您使用id类型转换编写代码时,实际上是在将id类型对象(委托)分配给MyClass从编译器角度来看是错误的对象。
self.delegate = mycustomobject; // Wrong; delegate data type is id while your custom object is of type MyClass
因此,当MyClass符合协议时,您self将成为符合MyClassProtocol并最终支持的数据类型,id<MyClassProtocol>这意味着任何符合该协议的数据类型。