为什么MemberOfClass不起作用

Nik*_*kie 0 objective-c ios

我不清楚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)

Dro*_*ppy 5

您会发现在创建颜色后记录颜色的类是有启发性的:

lbl.textColor = [UIColor grayColor];
NSLog(@"lbl.textColor class=%@", NSStringFromClass([lbl.textColor class]));
Run Code Online (Sandbox Code Playgroud)

你可能会发现实际的类UIDeviceRGBColorUICachedDeviceGrayColor或一些这样的,这是因为类集群.

使用isMemberOfClass只返回YES如果对象是指定的类中的一员,你可能想要的是isKindOfClass返回YES如果对象是指定类的成员或子类.

编辑请注意,似乎UIColor不使用类集群,@ Popeye的答案中的点是有效的.我的一般建议是永远不要isMemberOfClass在系统类上使用,然后你就不必担心类集群了.