我不清楚MemberOfClass是如何工作的.请查看以下示例.为什么在下面的例子中lbl.textColor不是成员?请为我清楚这一点.
UILabel *lbl = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 100)];
lbl.text = @"HI";
lbl.textColor = [UIColor grayColor];
[self.view addSubview:lbl];
if ([lbl.textColor isMemberOfClass:[UIColor class]]) { // Why Not Memeber
NSLog(@"Member");
}else {
NSLog(@"Not Member");
}
if ([lbl.text isMemberOfClass:[NSString class]]) {// Why Not Memeber
NSLog(@"Member");
}else {
NSLog(@"Not Member");
}
if ([imgView.image isMemberOfClass:[UIImage class]]) {// Memeber
NSLog(@"Member");
}else {
NSLog(@"Not Member");
}
Run Code Online (Sandbox Code Playgroud)
//输出
2014-12-19 20:17:43.383 Demo[13720:70b] Not Member
2014-12-19 20:17:45.883 Demo[13720:70b] Not Member
2014-12-19 20:17:52.772 Demo[13720:70b] Member
Run Code Online (Sandbox Code Playgroud)
您会发现在创建颜色后记录颜色的类是有启发性的:
lbl.textColor = [UIColor grayColor];
NSLog(@"lbl.textColor class=%@", NSStringFromClass([lbl.textColor class]));
Run Code Online (Sandbox Code Playgroud)
你可能会发现实际的类UIDeviceRGBColor或UICachedDeviceGrayColor或一些这样的,这是因为类集群.
使用isMemberOfClass只返回YES如果对象是指定的类中的一员,你可能想要的是isKindOfClass返回YES如果对象是指定类的成员或子类.
编辑请注意,似乎UIColor不使用类集群,@ Popeye的答案中的点是有效的.我的一般建议是永远不要isMemberOfClass在系统类上使用,然后你就不必担心类集群了.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |