考慮下面的代碼:基本的Objective-C類型轉換問題
if([obj isKindOfClass:[NSString class]]) {
NSString *s = [(NSString *)obj stringByAppendingString:@"xyzzy"];
}
我有點困惑在這裏。 if
語句檢查是否爲NSString
類。如果是,它將該對象和一個附加字符串分配給NSString *s
,我是否正確理解這一點?如果是這樣,你爲什麼仍然投它(NSString *)
? if
語句是否已經檢查過,並且不會導致類型轉換不必要?
豈不是完全正常的,只是說:提前
NSString *s = obj stringByAppendingString:@"xyzzy"];
感謝。
請注意,基於'isKindOfClass:'的編碼非常不典型。如果你不知道給定的對象引用實際是什麼類型,它通常表示僞造的體系結構。 – bbum
我明白了。這是CS193P幻燈片的一個例子;我會記住你的評論!謝謝。 – cabaret
@bbum我不會這麼說。 「isKindOfClass:'有很多合法用例,這是合理的。例如。某些方法需要允許調用者提供一個未知類的參數,在這種情況下,您可以在方法定義中使用'id'「類」,並依靠'isKindOfClass:'來相應地處理不同的類型。 –