Objective c 外部变量初始化
在我的项目中,我从过去6个月开始一直在做这个工作,我使用#define来定义FileManager类中的所有URL。但是现在我知道我必须根据条件使用两个不同的URL,所以动态地我不能更改#define值。所以我决定在FileManager类中使用外部变量,而不是#define 作为 在接口文件中Objective c 外部变量初始化,objective-c,extern,Objective C,Extern,在我的项目中,我从过去6个月开始一直在做这个工作,我使用#define来定义FileManager类中的所有URL。但是现在我知道我必须根据条件使用两个不同的URL,所以动态地我不能更改#define值。所以我决定在FileManager类中使用外部变量,而不是#define 作为 在接口文件中 extern NSString *Url; extern NSString *loginUrl; 在m文件中 @implementation UrlMana
extern NSString *Url;
extern NSString *loginUrl;
在m文件中
@implementation UrlManager
+ (void) initialize{
Url=@"http://xxxxxxxxxx.com";
loginUrl=[NSString stringWithFormat:@"%@%@",Url,@"/ipad.php?method=audLogin&username="];
}
但当我导入URLManager.h并使用loginUrl时,仍然是空的,请帮助我如何初始化外部变量,以便在应用程序中使用这些变量。首先,如果您有URL,请使用NSURL引用它 第二,以一致和描述性的方式命名您的全局变量
AliRootURL
和AliLoginURL
将是描述性的,并且有一个前缀(Ali
——更改它),以便于识别
最后,不要使用globals。相反,在URLManager
类上有返回URL的类方法(实际上也应该加前缀):
@interface AliURLManager:NSObject
+(NSURL*)rootURL; // no need to prefix methods in your custom classes
+(NSURL*)loginURL;
@end
这样,您就可以实现这些方法来直接返回URL:
+(NSURL*)rootURL
{
// use a static and dispatch_once() if you want only one instance
return [NSURL URLWithString:@"http://foobar.com/"];
}
+(NSURL*)loginURL
{
NSURL* root = [self rootURL];
NSURL* loginURL;
... calculate loginURL here... (http://stackoverflow.com/questions/718429/creating-url-query-parameters-from-nsdictionary-objects-in-objectivec)
return loginURL;
}
这样,您就可以轻松地重构代码,比如从默认数据库中读取URL,或者使用不同的开发配置
糟糕--但我能理解不想更改大量文件的愿望。应该是搜索和可替换的(至少,如果变量更具描述性的话)
如果要通过
+initialize
初始化全局变量,则需要确保该类被勾选。添加[URLManager类]
到.m文件中的applicationdFinishLaunching:
,是否有以下行:NSString*Url代码>和NSString*loginUrl代码>在@implementation
行之前?您使用的是ARC还是MRC?旁注-为什么不以这种方式初始化loginURL
:loginURL=[NSString stringWithFormat:@“%@/ipad.php?method=audLogin&username=,Url]代码>有关问题的可能原因,请参阅。答案的最后一段“bbum”提到了这一点。不,我现在不能使用方法,因为我只想更改一个文件,这样做我必须更改100个文件