全球int变量目标C全球int变量目标C(Global int variable objective

2019-05-12 06:37发布

我想在一个类中声明静态int变量,并有机会获得它在所有其他类。 做这个的最好方式是什么?

Answer 1:

有没有在Objective C.您可以创建其作为类的实现文件的文件范围的静态变量,并提供在类的静态setter和getter方法静态类变量。

或者,你可以把它一个老派的全局,用extern在.h文件中声明。 前一种方法更灵活 - 你可以在setter方法添加额外的检查,例如,后者是打字少,而且避免了方法调用的开销。



Answer 2:

这里有一些方法,你可以尝试

  • 声明中的appdelegate全局变量

  • 创建一个单独的类,并把全局变量存在。


使用的appdelegate

的appdelegate也是一种单级

函数的定义:

-(NSString*)ReadAppDelegateInstanceVariable:(NSString*)InstVar 
{
AppDelegate *appDel=(AppDelegate *)[UIApplication sharedApplication].delegate;
return [appDel valueForKey:InstVar];
}

函数调用:

[self ReadAppDelegateInstanceVariable:@"someInstanceVariableName"];

使用您自己的单例类

只有类的一个实例可以存在。

样品单身宣言:

@interface SigletonClass : NSObject
{
  //declare instance variable
}
+ (id)sharedSingletonClass;
@end

样品单的实现:

方法1:使用GCD

@implementation SigletonClass

+ (id)sharedSingletonClass {

    static SigletonClass *sharedClass = nil;

    static dispatch_once_t onceToken;//The way we ensure that it’s only created once is by using the dispatch_once method from Grand Central Dispatch (GCD).

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

    return sharedClass;
}

- (id)init {
    if (self = [super init]) {
     //init instance variable        
    }
    return self;
}
@end

方法2:不使用GCD

@implementation SigletonClass

+ (id)sharedSingletonClass {

    static SigletonClass *sharedClass = nil;

    @synchronized(self) {//To safeguard threading issues

        if (sharedClass == nil)
            sharedClass = [[self alloc] init];
    }

    return sharedClass;
}

- (id)init {
    if (self = [super init]) {
     //init instance variable        
    }
    return self;
}
@end

函数的定义:

-(NSString*)ReadSingleTonInstanceVariable:(NSString*)InstVar 
{
   SigletonClass sObj=[SigletonClass sharedSingletonClass];
   return [sObj valueForKey:InstVar];
}

函数调用:

[self ReadSingleTonInstanceVariable:@"SomeInstanceVariableName"];

的NSString INT:

-(int)ConvertToIntFromString:(NSString*)str
{
    return str.intValue;
}

据我所知,有与做了一个又一个的方式没有性能问题。

我总是喜欢单身类 ,而不是因为的appdelegate的代码将是免费的混乱,我认为过度使用的appdelegate 臭代码



Answer 3:

这打破了一些模式,我不使用它。

无论如何,如果你在你的应用程序委托声明属性,那么你可以拨打:
[[NSApp delegate] myVar]的任何地方。

究竟怎样的意图来使用这个变量?



Answer 4:

如何使用一个单独的类来保存它的任何类可以访问和范围是应用程序的整个运行时的所有变量。 看看这个链接



文章来源: Global int variable objective c