2015-04-02 43 views
-1

,如果我們強制轉換自定義對象到id會發生什麼,類型轉換在IOS從CustomObject到ID

我從不兼容型有分配的問題idMyclass* __Strong

工作代碼:

self.delegate=(id)mycustomobject; 

然後我鍵入我的對象到id,這一切都很好,作爲一種魅力工作。

但我的問題是會有任何後來出乎意料的問題。如果是這樣,避免此類警告的最佳方法是什麼。

回答

0

要回答你的問題的第一部分,如果您分配一個對象id你的對象將失去在編譯時間範圍類的關聯,這意味着,如果你在你的MyClass類有一個屬性名NSStringmyProp和你做像

id tempVar = (id)objMyClass; 

然後你將無法在編譯時訪問屬性myProp

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

爲了解決爲什麼你在分配對象,是因爲你聲明的屬性delegateid類型,是符合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>這意味着任何數據類型符合該協議的數據類型。

相關問題