Objective c 外部变量初始化

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

在我的项目中,我从过去6个月开始一直在做这个工作,我使用#define来定义FileManager类中的所有URL。但是现在我知道我必须根据条件使用两个不同的URL,所以动态地我不能更改#define值。所以我决定在FileManager类中使用外部变量,而不是#define

作为 在接口文件中

       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个文件