我有以下课程:
#import "Period.h"
@implementation Period
...
- (BOOL)isEqualTo:(id)object {
return [self isEqual:object];
}
- (BOOL)isEqual:(id)object {
if (object == self) {
return YES;
}
if ([[object beginDate] hash] == [[self beginDate] hash] &&
[[object endDate] hash] == [[self endDate] hash]) {
return YES;
}
return NO;
}
...
@end
还有以下测试,使用OCUnit
编写:
Period *period;
NSDate *beginDate;
NSDate *endDate;
- (void)setUp {
beginDate = [NSDate dateWithString:@"2011-02-25"];
endDate = [NSDate dateWithString:@"2011-03-25"];
period = [[Period alloc] initWithBeginDate:beginDate
endDate:endDate];
}
- (void)testEndDateShouldBeGreaterOrEqualThanBeginDate {
Period *newPeriod = [[Period alloc] initWithBeginDate:beginDate
endDate:beginDate];
STAssertEqualObjects(beginDate, [newPeriod beginDate], @"Begin dates are different");
STAssertEqualObjects(endDate, [newPeriod endDate], @"End dates are different");
}
之前我使用的是STAssertEquals
而不是STAssertEqualObjects
,并且没有在isEqual
上调用Period
方法。
我只想了解两件事:
isEqual
和isEqualTo
之间的区别是什么?答案 0 :(得分:6)
STAssertEquals
比较构成传递给它的两个参数的原始字节,并用于标量类型(float
,int
,{{1} },等等,char
或structs
---你不应该用它来比较Objective-C对象。 unions
通过调用STAssertEqualObjects
来比较两个Objective-C对象。
isEqual:
用于支持NSSpecifierTest
(请参阅NSComparisonMethods
Protocol Reference)。如果您的对象不是可编写脚本的,则无需为isEqualTo:
提供实现。