Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在objective c中以编程方式设置属性值_Iphone_Objective C_Ios_Properties - Fatal编程技术网

Iphone 在objective c中以编程方式设置属性值

Iphone 在objective c中以编程方式设置属性值,iphone,objective-c,ios,properties,Iphone,Objective C,Ios,Properties,我有一个文件Variables.m,用于存储我可以在我的应用程序中的所有类中使用的属性。现在,我想为类a中的一个属性(比如用户名)设置一个值,并且我希望它像常量一样可用于我的应用程序中的所有其他类(B、C、D、E…)。一旦他们在B类中初始化变量对象(比如var),如果他们发出var.username,他们应该得到我在a类中设置的用户名 实际上,我不想硬编码用户名值,而是希望以编程方式设置它,让所有类都看到我刚才设置的值。每当我导航到一个类时,我能在不传递Variables对象的情况下实现这一点吗

我有一个文件Variables.m,用于存储我可以在我的应用程序中的所有类中使用的属性。现在,我想为类a中的一个属性(比如用户名)设置一个值,并且我希望它像常量一样可用于我的应用程序中的所有其他类(B、C、D、E…)。一旦他们在B类中初始化变量对象(比如var),如果他们发出var.username,他们应该得到我在a类中设置的用户名


实际上,我不想硬编码用户名值,而是希望以编程方式设置它,让所有类都看到我刚才设置的值。每当我导航到一个类时,我能在不传递Variables对象的情况下实现这一点吗?

创建一个singelton类,该类具有适当的getter和setter,用于您希望它存储的项

然后,您可以从任何其他类引用该实例

例如,在Variables类中创建一个类方法,如下所示:

    +(Variables*)sharedVariables{
        static Variables *myVariables = nil;
        if (myVariables != nil){
             return myVariables;
        }
       myVariables = [[Variables alloc]init];
       return myVariables;
    }
如果您想要一个更好的实现,那么googleobjecticsingleton类实现

:)

要从其他类别中使用此选项,您只需键入:

[Variables sharedVariables].whatever

创建一个singelton类,该类为要存储的项具有适当的getter和setter

然后,您可以从任何其他类引用该实例

例如,在Variables类中创建一个类方法,如下所示:

    +(Variables*)sharedVariables{
        static Variables *myVariables = nil;
        if (myVariables != nil){
             return myVariables;
        }
       myVariables = [[Variables alloc]init];
       return myVariables;
    }
如果您想要一个更好的实现,那么googleobjecticsingleton类实现

:)

要从其他类别中使用此选项,您只需键入:

[Variables sharedVariables].whatever

您可以使用单例模式。像这样

@interface MySingleton : NSObject 
{
    NSString *username;
}
@property (nonatomic, retain) NSString *username;
+ (MySingleton *) sharedInstance;

@end


@implementation MySingleton
@synthesyse username;
static MySingleton *sMySingleton = nil;

+ (MySingleton *) sharedInstance
{
    @synchronized(self)
    {
        if (sMySingleton == nil)
        {
            sMySingleton = [NSAllocateObject([self class], 0, NULL) init];
        }
    }    
    return sMySingleton;
}

@end

您可以使用单例模式。像这样

@interface MySingleton : NSObject 
{
    NSString *username;
}
@property (nonatomic, retain) NSString *username;
+ (MySingleton *) sharedInstance;

@end


@implementation MySingleton
@synthesyse username;
static MySingleton *sMySingleton = nil;

+ (MySingleton *) sharedInstance
{
    @synchronized(self)
    {
        if (sMySingleton == nil)
        {
            sMySingleton = [NSAllocateObject([self class], 0, NULL) init];
        }
    }    
    return sMySingleton;
}

@end

或者,您可以使用
NSUserDefaults

在A类中设置变量:

NSString *usernameToSave = @"John Doe";
[[NSUserDefaults standardUserDefaults] setObject:usernameToSave forKey:@"userName"];
读取任何类中的变量:

NSString *userName = [[NSUserDefaults standardUserDefaults] objectforKey:@"userName"];
除了简单之外,它还有一个优点(不管是否),即它在应用程序重启时是持久的


它的缺点是不太安全;对于密码等,您应该使用所述的钥匙链服务。或者,您可以使用
NSUserDefaults

在A类中设置变量:

NSString *usernameToSave = @"John Doe";
[[NSUserDefaults standardUserDefaults] setObject:usernameToSave forKey:@"userName"];
读取任何类中的变量:

NSString *userName = [[NSUserDefaults standardUserDefaults] objectforKey:@"userName"];
除了简单之外,它还有一个优点(不管是否),即它在应用程序重启时是持久的


它的缺点是不太安全;对于密码等,您应该使用所述的钥匙链服务

谢谢,但我有几个问题。在你的单例类中,如果我想用值初始化它,比如用户名和密码,我该怎么做。我还可以有两个版本的sharedVariables,一个接受输入参数并为静态myVariables对象分配空间,另一个只返回myVariables对象?如果是,我将语句static Variables*myVariables=nil放在哪里?谢谢在init方法中设置这些。或者创建一个自定义的,即-(id)initWithMyData:(Type*)data1和data2:(Type*)data2;如果它们要更改,只需在该类的标准初始化器中键入它们。所以应该只有一个。如果您想要一个可以从其他类引用的单实例,请使用上面的class方法创建一个单实例。如果你想要这个类的另一个实例,那么就使用标准的init方法来创建它们。谢谢,但是我有几个问题。在你的单例类中,如果我想用值初始化它,比如用户名和密码,我该怎么做。我还可以有两个版本的sharedVariables,一个接受输入参数并为静态myVariables对象分配空间,另一个只返回myVariables对象?如果是,我将语句static Variables*myVariables=nil放在哪里?谢谢在init方法中设置这些。或者创建一个自定义的,即-(id)initWithMyData:(Type*)data1和data2:(Type*)data2;如果它们要更改,只需在该类的标准初始化器中键入它们。所以应该只有一个。如果您想要一个可以从其他类引用的单实例,请使用上面的class方法创建一个单实例。如果您想要这个类的另一个实例,那么只需使用标准的init方法来创建这些实例。