如何在Objective C中跟踪类的对象

时间:2011-01-25 19:54:36

标签: objective-c macos

我是C和Objective-C的新手,并希望实现一个类方法来返回满足特定条件的所有对象的NSDictionary,例如本例中的所有已加星标的文章:

Article.h:

@interface Article : NSObject {
    NSString *title;
    BOOL starred;
}
...
+ (NSMutableDictionary*) starredArticles;
@end

我该如何处理? Article.m文件中的静态全局NSMutableArray,然后在构造函数和析构函数中插入/删除?

2 个答案:

答案 0 :(得分:10)

这不是要走的路 - 必须有一些包含应用程序中文章的对象。 那是应该返回已加星标的文章的对象 - 这个类方法现在似乎是一个好主意,但它非常不灵活。

因此,假设您有一个对象将所有文章存储在NSMutableArray中。然后你可以使用谓词(参见the Predicate Programming Guide)来查找已加星标的文章并返回所需的词典。

答案 1 :(得分:2)

我将保留特定于该类中特定类的实例的代码,以及对管理该集合的控制器中的此类对象的集合进行操作的代码。

换句话说,根据您的需要制作您的类并组合实例变量,合成一些存取方法,编写您可能需要与ivars相关的任何其他方法。然后在您实际使用/引用这些对象的控制器中,您必须具有某种形式的集合(NSMutableArray,NSMutableDictionary,NSMutableSet)来保存它们。这是您应该在其中实现方法来计算已加星标的数量的控制器制品

您可能只会使用该方法来计算控制器中您已“控制”文章(您拥有NSMutableArray,NSMutableDictionary或文章的NSMutableSet)的星号文章的数量,因此实现它是有意义的那里。你总是可以实现你自己的集合类,它有一个集合ivar来保存你的文章;然后你可以在那里实现你的starredArticles方法,例如addArticle,article,replaceArticle,deleteArticle。

您建议的方法导致代码非常混乱,并且会降低代码的可重用性,我个人会尝试避免它。