IOS中从CustomObject到id的类型转换



如果我们将自定义对象类型转换为id,会发生什么

我遇到了从不兼容的类型Myclass* __Strong 分配给id的问题

工作代码:

self.delegate=(id)mycustomobject;

然后我把我的对象键入id,一切都很好,起到了符咒的作用。

但我的问题是,以后会不会出现任何意外的问题。如果是,避免这种警告的最佳方法是什么。

要回答问题的第一部分,如果将对象分配给id,则对象将在编译时范围内失去类关联,这意味着如果在类MyClass中具有NSString类型的属性名称myProp,并且执行类似的操作

id tempVar = (id)objMyClass;

那么您将无法在编译时访问属性CCD_ 9。

NSString *propValue =  tempVar.myProp;   // This will throw an error "Property not found".

要解决您在分配对象时遇到问题的原因,是因为您将属性delegate声明为符合MyClassProtocol协议的id类型,类似于

@property (nonatomic,assign) id<MyClassProtocol> delegate;

但是,您在课程MyClass中没有遵守MyClassProtocol。因此,当您使用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>,即符合该协议的任何数据类型。

相关内容

  • 没有找到相关文章

最新更新