IOS 7单例问题

时间:2014-07-27 10:01:05

标签: objective-c ios7 singleton

嗨,我知道这不是一个新问题,但我在这里读了很多,没有什么能帮助我找到问题。

我有一个单独的类UserFunctions

@interface UserFunctions : NSObject {

    NSUserDefaults *NSUser;

/* 
    NSString *name;
    NSString *email;
   */
}


+ (UserFunctions *)sharedInstance ;

@property (nonatomic,assign) NSString *name;
@property (nonatomic,assign) NSString *email;

在m班上:

@synthesize name;
@synthesize email;


+ (UserFunctions *)sharedInstance
{

    static UserFunctions *sharedInstance;
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{
        sharedInstance = [[UserFunctions alloc] init];
    });
    return sharedInstance;


}


-(id) init {
    if (self = [super init]) {
        NSUser = [NSUserDefaults standardUserDefaults];
        self = [NSUser objectForKey:@"UserFunctions"];
        self.name=@"Test";
    }
    return self;
}

在另一个班级我尝试保存

UserFunction = [UserFunctions sharedInstance]; UserFunction.name = userjson.username; UserFunction.email = userjson.email;

如果我直接尝试阅读:

NSString *test = [UserFunction email];

我在字符串中得到nil。

我错了什么?

1 个答案:

答案 0 :(得分:1)

你不应该为对象使用assign属性(除非你"在其他地方保留"该对象)

@property (nonatomic,assign) NSString *name;
@property (nonatomic,assign) NSString *email;

应该是:(如果你正在使用ARC)

@property (nonatomic,strong) NSString *name;
@property (nonatomic,strong) NSString *email;

在旁注中,有一件事让我在阅读你的代码时感到不安:你绝对不应该有一个名为NSUser的iVar,它看起来很像一个类名,它在阅读你的代码时会受到阻碍: )