我有一个Cocoa项目,其中包含一个保存SQLite数据库信息的对象。 到目前为止,信息由该对象存储在存储器中,并在用户界面中用于读取和写入新信息。 但现在我遇到了一个小问题......我决定创建一个新的控制器类来处理NSTableView的操作,我想访问在其他地方声明的同一个数据库对象。 哪个是访问此信息的最佳选择?我希望避免在内存中多次加载信息,并避免使用带有全局变量的纯C / C ++代码。
最好通过查看代码来理解我的观点。 我自然也接受其他解决方案。
我对代码的想法目前是这样的:
FirstClass.h
#import <Foundation/Foundation.h>
#import "DatabaseModel.h"
@interface FirstClass : NSObject {
IBOutlet NSScrollView *informationListTable;
NSMutableArray *informationList;
}
@end
FirstClass.m
#import "FirstClass.h"
@implementation FirstClass
- (void)awakeFromNib{
DatabaseModel *list = [[DatabaseModel alloc] init];
informationList = [[NSMutableArray alloc] initWithArray:[list loadList]];
[list release];
[machinesListTable reloadData];
}
SecondClass.h
#import <Foundation/Foundation.h>
@interface SecondClass : NSObject {
IBOutlet NSTextField *labelName;
NSString *name;
}
- (IBAction)showName:(id)sender;
@end
SecondClass.m
#import "FirstClass.h"
#import "SecondClass.h"
@implementation SecondClass
- (IBAction)showName:(id)sender{
/*
Here name must get something like:
[[FirstClass.informationList objectAtIndex:3] name]
Here labelName must display name.
*/
}
@end
答案 0 :(得分:2)
您可以创建对象一次然后传递对象,每个控制器根据需要保留它。或者您可以使用单例实例。我会说单例实例更容易阅读,但这取决于应用程序
答案 1 :(得分:1)
一种解决方案是让FirstClass
成为单身人士。然后,在代码中的任何其他位置,您可以调用[FirstClass sharedInstance]
(将sharedInstance
替换为您将为类方法指定的名称)并使用此对象。但是你必须小心并发问题。