Objective -C,如何一次清除共享实例的所有数据?

问题描述 投票:1回答:3

我使用共享实例类来保存基本用户的信息,如user_id,age,name等等。现在我需要在注销期间一次删除所有数据。我不想一个一个地删除数据。有什么方法可以做到这一点吗?任何建议都会很棒!!提前致谢。

到目前为止我做了什么,但它没有用。我还尝试了其他方法,无论我在互联网上找到哪种方式,但都没有用:

static GlobalValues *sharedManager = nil;

+(GlobalValues*)sharedManager{
//static id sharedManager;
static dispatch_once_t once;
dispatch_once(&once, ^{
    sharedManager = [[GlobalValues alloc] init];
});
return sharedManager;
}

+(void)resetSharedInstance {
@synchronized(self) {
    sharedManager = nil;
}
}
objective-c singleton sharedpreferences
3个回答
1
投票

我总是使用这个策略,它将清除对象的属性而不是对象本身,并根据需要重新设置它们

。H

 #import <Foundation/Foundation.h>
 #import <AVFoundation/AVFoundation.h>
 @interface DataClass : NSObject


  @property(nonatomic,retain)NSArray*moreNames;



  +(DataClass*)getInstance;

  @end

.M

#import "DataClass.h"

@implementation DataClass

static DataClass *instance = nil;

+(DataClass *)getInstance
{
   @synchronized(self)
{
    if(instance==nil)
    {
        instance= [DataClass new];

        instance.moreNames=[[NSArray alloc]initWithObjects:NSLocalizedString(@"moreName1", nil),NSLocalizedString(@"moreName2", nil),NSLocalizedString(@"moreName3", nil),NSLocalizedString(@"moreName4", nil),NSLocalizedString(@"moreName5", nil),NSLocalizedString(@"moreName6", nil),NSLocalizedString(@"moreName7", nil),NSLocalizedString(@"moreName8", nil),nil];


    }
}
return instance;
}

 -(void)clearContents
 {

    self.moreNames = nil

 }

 @end

0
投票

您可以将nil分配给静态变量。这里的问题是第二次不会调用分配给dispatch_once的init块,因此您无法再次初始化sharedinstance。

我同意@ Sh_Khan的策略。根据你想要的我想,我认为你可以将所有数据放在模型中(user_id,age,name ...),然后在注销时重置模型:

+ (DataManager *)shareInstance {

    //static id sharedManager;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        sharedManager = [[DataManager alloc] init];
        sharedManager.model = [Model new];
    });

    return sharedManager;

}

+ (void)resetSharedInstance {

    @synchronized(self) {
        sharedManager.model = [Model new]; 
    }

}

-2
投票

静态变量不能用nil分配。静态变量只能在一个循环中初始化一次。后续初始化将跳过它并继续到下一行。

© www.soinside.com 2019 - 2024. All rights reserved.