2014-02-23 47 views
0

我有以下方法。@encode for type id其中id實際上是任何對象

- (void)someObject:(id)obj { 
    char* encoding = @encoding(typeof(obj)); 
    NSString *s = [NSString stringWithCString:encoding encoding:NSUTF8StringEncoding]; 
    NSLog(s); 
} 

這個方法總是返回@"@"我是否通過NSNumber, NSArray, NSDictionary or NSString類型的變量中的obj。我假設它正在檢查obj指針類型。

我必須這樣做才能返回已傳遞的變量的實際類型編碼?

+1

「變量的類型編碼」是什麼意思?你在期待什麼? – Merlevede

+0

問題是,解引用一個'id'不透明類型是不合理的(所以@encode響應是正確的,因爲'id'是一個對象,意思是'@')......出於好奇,你是什麼試圖完成這個? – HepaKKes

+0

@HepaKKes:我試圖從字典中將這些值賦給一個類的ivars。我有一個Ivars列表(使用class_copyIvarList()),我已經得到了伊娃類型(使用ivar_getTypeEncoding()),現在我想確保伊娃正在填充兼容值。 (例如NSArray伊娃應該填充NSArray)。我可以做if/else檢查使用isKindOfClass,但我在想是否有另一種方式,我只是比較伊娃的類型編碼和傳入的參數。 –

回答

2

@encode()是一個編譯時構造;它只知道變量的類型,而不是運行時將包含在對象中的對象的類。任何對象類型的變量都將編碼爲@

您將不得不使用運行時檢查,詢問對象的類,以實現您的目標。

相關問題