,如果我們強制轉換自定義對象到id
會發生什麼,類型轉換在IOS從CustomObject到ID
我從不兼容型有分配的問題id
Myclass* __Strong
工作代碼:
self.delegate=(id)mycustomobject;
然後我鍵入我的對象到id
,這一切都很好,作爲一種魅力工作。
但我的問題是會有任何後來出乎意料的問題。如果是這樣,避免此類警告的最佳方法是什麼。
,如果我們強制轉換自定義對象到id
會發生什麼,類型轉換在IOS從CustomObject到ID
我從不兼容型有分配的問題id
Myclass* __Strong
工作代碼:
self.delegate=(id)mycustomobject;
然後我鍵入我的對象到id
,這一切都很好,作爲一種魅力工作。
但我的問題是會有任何後來出乎意料的問題。如果是這樣,避免此類警告的最佳方法是什麼。
要回答你的問題的第一部分,如果您分配一個對象id
你的對象將失去在編譯時間範圍類的關聯,這意味着,如果你在你的MyClass
類有一個屬性名NSString
型myProp
和你做像
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>
這意味着任何數據類型符合該協議的數據類型。