我想使用Static Var来保存NSString。 所以我在.h文件中定义了一个静态Var,如下所示:
#ifndef GlobalParameters_h
#define GlobalParameters_h
//access token
static NSString *applicationToken;
#endif
在A类中,我改变了静态var,如下所示:
#import "ClassA.h"
#import "GlobalParameters.h"
extern NSString *applicationToken;
@implementation ClassA
+ (void)parseResponse:(NSString *)response
{
NSDictionary *responseDic = [response objectFromJSONString];
NSString *token = [responseDic objectForKey:@"token"];
applicationToken = [token copy];
NSLog(@"%@",applicationToken);
}
当调试器运行到
时applicationToken = [token copy];
我发现“applicationToken”是零,但下一句
NSLog(@"%@",applicationToken);
可以在控制台中输出正确的值!在ClassB中,“applicationToken”也是零。 我不知道为什么静态var是零。我认为编译器会在GlobalParameters.h中找到“applicationToken”的定义。但为什么我不能修改静态值?
感谢您的帮助:)
答案 0 :(得分:2)
static
全局变量意味着它所拥有的每个对象文件都拥有它。因此,对于ClassA,ClassB,将有自己的applicationToken。
要为所有对象文件创建全局变量,您需要:
在GlobalParameters.h中:
#ifndef GlobalParameters_h
#define GlobalParameters_h
//access token
extern NSString *applicationToken;
#endif
在GlobalRarameters.m中:
#import "GlobalParameters.h"
NSString *applicationToken;
P.S。我希望您使用ARC,因为如果没有,那么applicationToken = [token copy];
将导致内存泄漏。
答案 1 :(得分:0)
嘿它工作正常,我正在检查这个
一旦检查了你得到了什么" responseDic" (或)不,检查 字典有令牌密钥
static NSString *applicationToken; applicationToken = @"srinivas"; NSLog(@"%@",applicationToken); NSDictionary *responseDic = [NSDictionary dictionaryWithObject:@"static" forKey:@"token"]; NSString *token = [responseDic objectForKey:@"token"]; applicationToken = [token copy]; NSLog(@"%@",applicationToken); [AppDelegate parseResponse:responseDic];