在Objective-C中比较对象
我试图比较Objective-C中的对象,只是想知道如何比较包含两个NSString的两个对象(UIView的实例):在Objective-C中比较对象,objective-c,cocoa,Objective C,Cocoa,我试图比较Objective-C中的对象,只是想知道如何比较包含两个NSString的两个对象(UIView的实例): #import <Foundation/Foundation.h> @interface Notebook : UIView { NSString *nameOfBook; NSString *colourOfBook; } @property (nonatomic, retain) NS
#import <Foundation/Foundation.h>
@interface Notebook : UIView
{
NSString *nameOfBook;
NSString *colourOfBook;
}
@property (nonatomic, retain) NSString *nameOfBook;
@property (nonatomic, retain) NSString *colourOfBook;
现在,我的大问题是如何比较这些对象。理想情况下,我只想比较他们的名字,而不考虑颜色。但我想现在我的代码不是这样工作的。将整个物体进行比较,现实中持有"讲座"和"(无颜色)的物体不可能与理论上持有"讲座"和"红色"的物体相同
如何实现仅根据对象的一个属性(在本例中为名称)比较对象?如果阅读IndexOfoObject:的文档,您会发现NSArray为数组中的每个对象调用isEqual:。所以,重写笔记本的isEqual并实现您自己的比较例程
顺便问一下,为什么您在分配时没有初始化笔记本的一个实例,用一个自动释放的实例覆盖它,然后再释放它?(别介意你可能会先在循环中释放它!)你注定会崩溃。为什么在遍历数组时要从数组中删除对象?您希望实现类似
-isEqual:
的方法。请看一看。我想你是对的,我应该再仔细考虑一下。谢谢你的想法!我希望我没有被那些“无中生有”的评论所束缚对于像UIView
这样的子类,我会非常小心地重写-isEqual:
。UI框架可能取决于UIView的不同实例。此外,如果覆盖-isEqual:
,则必须确保-hash
是一致的。请参阅
for (int i=0; i < [theory count]; i++) {
Notebook *testedNotebook = [Notebook alloc];
testedNotebook = [theory objectAtIndex:i];
if ([reality indexOfObject:testedNotebook] == NSNotFound)
{
NSLog(@"Book is not found in reality - remove it from theory...");
[theory removeObject:testedNotebook];
}
[testedNotebook release];
}