這是相當先進的東西。我將一些運行時代碼作爲一個側面項目搞亂了。我試圖解決的問題是這樣的:如果我有一個id類型的對象,並且該對象可以是一個字符串,一個類或一個協議,我該如何判斷它是什麼?iOS:如何判斷類型id的對象是類還是協議
例如,這裏是一些代碼,我搞亂:
[objArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[NSString class]]) {
// Do something with the string ...
} else if (... obj is a Protocol ...) {
// Do something with the protocol ...
} else if (... obj is a Class ...) {
// Do something with the class ...
} else {
// It's something we are not interested in!
}
}];
到現在爲止我已經沒有問題,存儲爲的NSString,陣列中的類和協議實例的分類和其他的一切都是精細。我需要檢測它們的原因很簡單,就是我無法控制進入該代碼的內容。所以我需要確定循環處理的obj
在做什麼之前。
我一直在嘗試各種運行時功能和東西,但到目前爲止沒有運氣,如果確定什麼對象是。
任何人都試過類似的東西?
協議發現被定義爲因此,它們實際上可以存儲在NSArrays和一個類型NSObject的的喜歡。我已經很成功地做到了這一點。很顯然,我正在做的事情是一個非常動態的東西,而且它通常只是Objective C代碼的一部分。 – drekka 2015-04-03 13:35:22