- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我明白 isKindOfClass: 和 isMemberOfClass: 之间的区别,但我遇到了一些我不明白的事情:
-(UIImage *)doSomething:(id)item
{
UIImage *image;
if ([item isKindOfClass:[NSDictionary class]]) {
NSDictionary *dictionary = item;
NSData *data = [dictionary objectForKey:@"image"];
image = [[UIImage alloc] initWithData:data];
} else { // if item is UIImage
image = item;
}
return image;
}
如果我在这种情况下使用 isKindOfClass,一切都会按预期进行。如果我使用 isMemberOfClass,我会遇到以下崩溃,稍后询问图像的大小:
-[__NSDictionaryI size]: unrecognized selector sent to instance 0x123456
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryI size]: unrecognized selector sent to instance 0x123456'
我阅读了 this one 等其他帖子,但找不到任何更接近的帖子。
最佳答案
是的,它们是不同的,并且它们的区别已记录在案。使用 isKindOfClass:
将为子类返回 YES 而 isMemberOfClass:
则不会。由于 NSDictionary 是一个类簇(在内部使用私有(private)子类),因此在使用两者时会得到不同的结果(因为实例将是一个私有(private)子类(在您的情况下为 __NSDictionaryI
)。
当使用 isMemberOfClass:
时,您的情况是这样的:
item
是私有(private)字典子类isMemberOfClass:
返回 NOsize
并抛出异常。关于ios - NSDictionary (__NSDictionaryI) isMemberOfClass : isKindOfCLass: difference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069707/
我不清楚 isMemberOfClass 是如何工作的。检查下面的例子。为什么在下面的示例中 lbl.textColor 不是成员?请帮我解决这个问题。 UILabel *lbl = [[UI
我有一个 NSArray 包含 (id) 6 种 UIModels:按钮、图像等.. 它们都是我的基本模型的子类。例如: MyButtonModel : MyUIModel : NSObject 所以
之间有什么真正的区别吗: id value; BOOL compare1 = [value isMemberOfClass:[SomeClass class]]; BOOL compare2 = [v
我应该先说我来自 Java/Android 背景,这影响了我对“成员”一词的理解。也就是说,我开始学习 Objective-C,我遇到了 isMemberOfClass 方法,这个名字让我感到困惑。
关键字is等同于isKindOfClass。 但我无法在 swift 中找到与 isMemberOfClass 等价的东西。 注意:我的问题不是关于 isKindOfClass 或 isMembero
Swift 中的 isKind(of aClass: AnyClass) 和 isMember(of aClass: AnyClass) 函数有什么区别? Objective-C 中的原始问题 Wha
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: 'isMemberOfClass' returning 'NO' when custom init “isM
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3]; if ([arr isMemberOfClass:[NSMutableArray
Swift 中的 isKind(of aClass: AnyClass) 和 isMember(of aClass: AnyClass) 函数有什么区别? Objective-C 中的原始问题 Wha
我明白 isKindOfClass: 和 isMemberOfClass: 之间的区别,但我遇到了一些我不明白的事情: -(UIImage *)doSomething:(id)item { U
这是我写的一个小测试程序: #import int main(int argc, char **argv) { NSAutoreleasePool *pool = [[NSAutorel
我有一个 OCUnit 测试类:PatientTestViewControllerTests。下面是界面: @interface PatientTestViewControllerTests : Se
我有一个 OCUnit 测试类:PatientTestViewControllerTests。下面是界面: @interface PatientTestViewControllerTests : Se
我知道Apple has cautioned反对使用它。但鉴于他们的推理,结果远非相关和预期。 这是我的调试输出 - 结果在代码中没有什么不同 - 下面只是为了简洁: (lldb) po [@"Hel
模糊的概述是我正在 NSArray 类别中编写一个方法,该方法将采用 Class 并将 Array 过滤为属于该类成员的元素.像这样的东西: @implementation NSArray(filte
我是一名优秀的程序员,十分优秀!