使用self vs class name

时间:2013-12-28 23:32:47

标签: ios objective-c

摘自CS193P PlayingCard.M

+ (NSArray *)rankStrings
{
    return @[@"?",@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K"];
}
+(NSUInteger)maxRank{
    return [[self rankStrings] count]-1;
}
-(void)setRank:(NSUInteger)rank
{
    if(rank <= [PlayingCard maxRank])
    {
        _rank = rank;
    }
}

据我所知,在第三种方法中,你不能说

-(void)setRank:(NSUInteger)rank
{
    if(rank <= [self maxRank])
    {
        _rank = rank;
    }
}

因为它是一个实例方法,所以self将引用一个不能使用maxRank方法的实例对象。

但是在maxRank实施中,不会 return [[PlayingCard rankStrings] count]-1;

相同

return [[self rankStrings] count]-1;

有什么区别?

1 个答案:

答案 0 :(得分:2)

如果某人为您的班级做了子类,那么差异可能很大。如果他们这样做,并覆盖你的maxRank函数,那么新定义将在子类中使用,而不是在基类中定义的定义。如果要强制子类使用bass类的maxRank定义,则使用类名,否则使用self