次のようなコードがたくさんあります。
id myObjectRaw = getObject();
if(![myObjectRaw isKindOfClass:[MyClass class]]) return nil;
MyClass * myObject = myObjectRaw;
...
ここでid getObject()
は、いくつかの種類のオブジェクトを返すことができます。ただし、上記のコードは私には不格好に感じます。これを書いても安全ですか?
MyClass * myObject = getObject();
if(![myObject isKindOfClass:[MyClass class]]) return nil;
...
コンパイラは文句を言いませんが、 にgetObject
関連しないオブジェクトを返す場合、未定義の動作を踏んでいないかどうかわかりませんMyClass
。
(いいえ、返されるすべてのクラスを実際に制御できないため、スーパークラスまたはインターフェイスを使用することはできません。)