Objective C中没有静态类变量.您可以在类的实现文件中将其创建为文件范围静态变量,并在类中提供静态setter和getter方法.
或者你可以把它变成一个老派全球,并extern在.h文件中声明.前一种方法更灵活 - 您可以在setter方法中添加额外的检查,例如,后者减少输入,并避免方法调用开销.
以下是您可以尝试的一些方法
在appdelegate中声明全局变量
创建一个单例类并将全局变量放在那里.
appdelegate也是一种单身类
功能定义:
-(NSString*)ReadAppDelegateInstanceVariable:(NSString*)InstVar
{
AppDelegate *appDel=(AppDelegate *)[UIApplication sharedApplication].delegate;
return [appDel valueForKey:InstVar];
}
Run Code Online (Sandbox Code Playgroud)
功能调用:
[self ReadAppDelegateInstanceVariable:@"someInstanceVariableName"];
Run Code Online (Sandbox Code Playgroud)
只能存在一个类实例.
单例声明示例:
@interface SigletonClass : NSObject
{
//declare instance variable
}
+ (id)sharedSingletonClass;
@end
Run Code Online (Sandbox Code Playgroud)
单例实现示例:
方法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
Run Code Online (Sandbox Code Playgroud)
方法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
Run Code Online (Sandbox Code Playgroud)
功能定义:
-(NSString*)ReadSingleTonInstanceVariable:(NSString*)InstVar
{
SigletonClass sObj=[SigletonClass sharedSingletonClass];
return [sObj valueForKey:InstVar];
}
Run Code Online (Sandbox Code Playgroud)
功能调用:
[self ReadSingleTonInstanceVariable:@"SomeInstanceVariableName"];
Run Code Online (Sandbox Code Playgroud)
NSString到int:
-(int)ConvertToIntFromString:(NSString*)str
{
return str.intValue;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,没有任何性能问题,可以单独使用另一种方式.
我总是喜欢单独的类而不是appdelegate,因为代码将是无杂乱的,我认为过度使用appdelegate作为臭代码.
| 归档时间: |
|
| 查看次数: |
7031 次 |
| 最近记录: |