多个类中的变量访问

时间:2012-02-08 13:02:17

标签: objective-c xcode macos cocoa

我有一个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

2 个答案:

答案 0 :(得分:2)

您可以创建对象一次然后传递对象,每个控制器根据需要保留它。或者您可以使用单例实例。我会说单例实例更容易阅读,但这取决于应用程序

答案 1 :(得分:1)

一种解决方案是让FirstClass成为单身人士。然后,在代码中的任何其他位置,您可以调用[FirstClass sharedInstance](将sharedInstance替换为您将为类方法指定的名称)并使用此对象。但是你必须小心并发问题。