在整个应用程序中保持对象活着 - 如何?

时间:2011-02-03 09:57:27

标签: objective-c cocoa singleton

这是我想做的事。
我有一个名为userInfo的类。我在另一个名为LoginInfo的类中创建了此对象的实例。我想让这个实例保持活力并且可以访问所有其他类,直到应用程序还活着......

我如何实现这一目标?我在某处读到了我可以用单例类做到这一点。但我不知道它们是什么......我对可可很新。请指导..

提前致谢..


@interface UserInfo : NSObject {
    NSString * firstName;
    NSString * lastName;
    NSString * uID;
    NSString * password;
    NSString * userType;

}

-(id)initWithFirstName:(NSString *)fname andLastName:(NSString *)lname andUID:(NSString *)userID andPassword:(NSString *)pwd andUserType:(NSString *)type;
@property (readwrite, copy) NSString * firstName;
@property (readwrite, copy) NSString * lastName;
@property (readwrite, copy) NSString * uID;
@property (readwrite, copy) NSString * password;
@property (readwrite, copy) NSString * userType;

@end



#import "UserInfo.h"


@implementation UserInfo

-(id)initWithFirstName:(NSString *)fname andLastName:(NSString *)lname andUID:(NSString *)usid andPassword:(NSString *)pwd andUserType:(NSString *)type{
    self=[super init];
    if (self) {
        self.firstName=fname;
        self.lastName=lname;
        self.uID=usid;
        self.password=pwd;
        self.userType=type;
        }
    return self;
}

@synthesize firstName;
@synthesize lastName;
@synthesize uID;
@synthesize password;
@synthesize userType;


@end

这是我想制作单身的课程....请指导我要做什么改变..我想使用自定义构造函数... 对不起,把这段代码作为答案。但我无法在评论中得到它......

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

这听起来确实像Singleton Pattern的一个小描述。实现Singleton的一种方法是通过类方法访问它的功能;这些类方法作为私有类成员访问单个实例,如果它不存在则创建它。

我无法帮助你使用cocoa语法(objective-c如果我没有弄错的话),这里有一些伪代码来说明一种可能的实现:

class Singleton {
    /* class member */
    private static Singleton instance = undef;

    /* class methods */
    public static type1 doSomething() {
        Singletong instance = Singleton::getInstance();
        return instance->reallyDoSomething();
    }

    private static Singleton getInstance() {
       if( !defined(Singleton::instance)) {
            Singleton:instance = new Singleton();
       }
       return Singleton::instance;
    }

    // instance method
    private type1 reallyDoSomething() {
       type1 result;
       /* exciting stuff */
       return result;
    }
};