[英]How to keep track of a class's objects in Objective C
我是C和Objective-C的新手,并且想实现一个类方法来返回满足特定条件的所有对象的NSDictionary,例如本例中所有带星号的文章:
@interface Article : NSObject {
NSString *title;
BOOL starred;
}
...
+ (NSMutableDictionary*) starredArticles;
@end
我将如何处理? 在Article.m文件中包含静态全局NSMutableArray,然后在构造函数和析构函数中插入/删除?
这不是要走的路-在应用程序中必须有一些包含文章的对象。 那是应该返回已加星标的文章的对象-这种类方法现在似乎是一个好主意,但它非常不灵活。
因此,假设您有一个将所有文章存储在NSMutableArray
的对象。 然后,您可以使用谓词(请参阅《谓词编程指南》 )仅查找加星标的文章并返回所需的字典。
我将保留特定于该类中某个类的特定实例的代码,以及在管理该对象的控制器中对此类对象的集合进行操作的代码。
换句话说,根据需要创建类并组成实例变量,综合一些访问器方法,编写可能需要与ivars相关的任何其他方法。 然后,在您实际使用/引用这些对象的控制器中,必须具有某种形式的集合(NSMutableArray,NSMutableDictionary,NSMutableSet)来容纳它们。在控制器中,您应实现方法以对加星号进行计数文章。
您可能只会使用该方法来对正在“控制”文章的控制器(其中具有NSMutableArray,NSMutableDictionary或NSMutableSet of Articles)中的已加星标的文章数进行计数,因此在此处实施它是有意义的。 您总是可以实现自己的集合类,该集合类具有用于保存您的文章的集合ivar。 然后您可以在其中实现starredArticles方法,例如addArticle,article,replaceArticle,deleteArticle。
您建议的方法会导致代码非常混乱,并降低代码的可重用性,我个人会尝试避免使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.