Ios 注销时删除所有变量值

Ios 注销时删除所有变量值,ios,swift,Ios,Swift,当我从应用程序注销时,如何从一个位置删除所有变量值?与NSUserDefaults类似,我们使用以下代码: /*===CLEAR ALL NSUSERDEFAULTS====*/ let appDomain = NSBundle.mainBundle().bundleIdentifier! NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain) 从设计的角度,创建一个处理所有设置的类-例

当我从应用程序注销时,如何从一个位置删除所有变量值?与
NSUserDefaults
类似,我们使用以下代码:

/*===CLEAR ALL NSUSERDEFAULTS====*/
let appDomain = NSBundle.mainBundle().bundleIdentifier!   
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)

从设计的角度,创建一个处理所有设置的类-例如,我的项目中有
xUserPreferences
,并将所有设置存储在一个地方(通常是一个类,该类具有将其值委托给
NSUserDefaults
)的各种变量)。除了没有在名称空间中浮动各种默认键之外,您还可以很好地了解应用程序正在设置的所有内容

在这个类上,您可以有一个
func clearalpreferences()
方法,它可以(各种选项):

  • 您可以尝试在
    NSUserDefaults
  • 枚举您拥有的所有默认键,并调用
    NSUserDefaults上的
    removeObjectForKey:
    方法
  • 如果您在密钥前加前缀(例如,我在所有默认密钥前加了
    XU
    ),您可以通过查看
    NSUserDefaults.standardUserDefaults().dictionaryRepresentation()
    中的密钥并将其与前缀匹配来自动执行此操作
  • 使用套件-查看指定的初始值设定项-传入额外的套件名称,然后您可以在
    NSUserDefaults
    上调用
    func removeSuiteName()
    -这可能是最好的方法,因为它允许您区分与会话相关和非会话相关的设置,并仅擦除与会话相关的设置
编辑:


创建一个由loggedin用户的所有属性组成的类(您希望在注销时清除该属性)

最好的方法是使用dispatch创建共享实例一次,而不是在需要重置属性时,只需重置dispatchonceToken

这是objective C中的示例代码

static dispatch_once_t onceToken;


+ (id)sharedInstance
{

    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });

    return instance;
}

+ (void)clearMemberInfo
{
    //  [[NSNotificationCenter defaultCenter] removeObserver:self];
    //instance = nil;
    onceToken = 0;
} 

我需要上面的代码来删除所有变量值。我不确定我是否理解你的问题-你已经有了一些代码-它不工作吗?我已经用Swift中的一些示例代码更新了答案(因为您发布了Swift代码,我假设您正在使用Swift),但你们真的应该能够自己把这些放在一起…这很好,但我想从应用程序中删除所有变量的值。所以你们是说你们想删除所有类的所有变量,而不是单个类的所有值?在整个应用程序中,所有变量的值都设置为零。这很难。。。但您需要创建一个基类,所有类都从该基类继承,然后需要实现remove property方法,该方法将遍历其自身属性的循环,并将其设置为nil。。。这种逻辑既复杂又难看,理想情况下,你根本不应该做这种操作。根本不需要这样做。如果你使用OS X创建一个处理会话的新进程,一旦你注销,你就可以终止该进程。或者如上所述,跟踪创建的所有实例,即在init方法中创建子类,将变量添加到列表中,等等。列表应为非保留
CFArray
,在deinit/dealoc中,从列表中删除变量。注销时,清除列表。除非你有循环依赖,否则它应该是有效的。这个问题绝对是误导性的。考虑一下解释一下自己。您在问题中谈论的是
NSUserDefaults
,但是,根据我在您的评论中了解的情况,您有一些变量(全局?)希望一次全部删除。如果没有关于如何存储变量等的附加信息,这通常是无法回答的。
static dispatch_once_t onceToken;


+ (id)sharedInstance
{

    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });

    return instance;
}

+ (void)clearMemberInfo
{
    //  [[NSNotificationCenter defaultCenter] removeObserver:self];
    //instance = nil;
    onceToken = 0;
}