如果我们将自定义对象类型转换为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
的类型,例如id
MyClassProtocol
@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>
这意味着任何符合该协议的数据类型。