有沒有辦法找出Cocoa中的任意對象是否是基礎對象?我在談論的NSString,NSArray的,NSDictionary的等如何檢查對象是否是Cocoa中的Foundation對象?
讓我解釋多一點...
Foundation對象(據我所知)有一些共同的特點:它們都實現了NSCoding協議,它們都可以進入PList等
因此,例如,如果我想存檔一個對象圖到磁盤,這將是有用的,以確保我添加到對象圖的任何對象是基礎對象或我的自定義對象我已經實施了NSCoding,並且這看起來很愚蠢:
if ([myObject isKindOfClass:[NSString class]] ||
[myObject isKindOfClass:[NSNumber class]] ||
[myObject isKindOfClass:[NSArray class]] ||
[myObject isKindOfClass:[NSDictionary class]] ||
[myObject isKindOfClass:[NSSet class]] ||
...) {
//add myObject to object graph
}
這是一個簡單但可能沒用的例子,我遇到的問題是我編寫的一些代碼將字典轉換爲使用格式字符串與%@
說明符的url params字符串,但我不希望任意對象在那裏去,因爲我不想在我的網址參數的內存地址:
//convert dictionary into url params string
[postDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([key isKindOfClass:[NSString class]] && ([obj isKindOfClass:[NSString class]] || [obj isKindOfClass:[NSNumber class]])) {
[tempPost appendFormat:@"%@=%@&", key, obj];
}
else {
*stop = TRUE;
}
}];
NSString *post;
if ([tempPost length] > 0) {
post = [tempPost substringToIndex:[tempPost length] - 1];
}
你是什麼意思? _Every_'NSString'既是Foundation也是Core Foundation('CFStringRef')對象。他們是一樣的。例如,這就是爲什麼你在調試器中看到'NSCFString'作爲字符串的基本類型的原因。 –
請參閱我的編輯 – lms