比较Objective-C中的对象



我试图比较Objective-C中的对象,只是徘徊如何,例如,两个对象(这是UIView的实例)被比较,保存两个nsstring,像这样:

    #import <Foundation/Foundation.h>
    @interface Notebook : UIView
    {
        NSString *nameOfBook;
        NSString *colourOfBook;
    }
    @property (nonatomic, retain) NSString *nameOfBook;
    @property (nonatomic, retain) NSString *colourOfBook;

让我们假设我有两个nsmutablearray,其中包含几个类型为Notebook的对象。一个叫现实,另一个叫理论。现实中有两个名为@"Lectures"@"Recipies"的笔记本,但是colorrofbook都是空的。理论持有三个笔记本,名称为:book @"Lectures", @"Recipies", @"Zoo", colorrofbook @"red", @"yellow", @"green"

我想比较一下这两个数组,并根据实际调整理论。在本例中,它意味着删除@"Zoo"。我不能简单地用现实代替理论,因为那样的话,我就失去了理论所储存的所有色彩。

这是我想出来的代码:

    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];
}

现在,我最大的问题是如何比较对象。理想情况下,我只想比较他们的名字,而不考虑颜色。但我想这不是我的代码现在的工作方式。整个对象被比较,现实中包含@"Lectures"和@"(无颜色)的对象不可能与理论中包含@"Lectures"和@"red"的对象相同。

我怎样才能实现根据对象的一个属性(在这种情况下是名称)来比较对象?

如果你阅读indexOfObject:的文档,你会发现NSArray对数组中的每个对象调用isEqual:。所以,为Notebook重写isEqual并实现你自己的比较例程。

说到这里,你为什么不初始化一个Notebook的实例,用一个自动释放的实例覆盖它,然后释放它?(没关系,你可能会先在循环中释放它!)你注定要撞车。为什么在迭代数组时要从数组中删除对象?

您希望实现像-isEqual:这样的方法。

最新更新