Как объявить глобальную переменную в Objective-C? - PullRequest
1 голос
/ 17 февраля 2010
// MyClass.h
@interface MyClass : NSObject
{
   NSDictionary *dictobj;
}
@end

//MyClass.m
@implementation MyClass

-(void)applicationDiDFinishlaunching:(UIApplication *)application
{

}
-(void)methodA
{
// Here i need to add objects into the dictionary
}

-(void)methodB
{
//here i need to retrive the key and objects of Dictionary into array
}

У меня вопрос, так как methodA и methodB используют объект NSDictionary [i.e dictobj]. В каком методе я должен написать этот код:

dictobj = [[NSDictionary alloc]init];

Я не могу сделать это дважды в обоих методах, следовательно, как это сделать в глобальном масштабе?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Прежде всего, если вам нужно изменить содержимое словаря, он должен быть изменяемым:

@interface MyClass : NSObject
{
    NSMutableDictionary *dictobj;
}
@end

Обычно вы создаете переменные экземпляра, такие как dictobj, в указанном инициализаторе, например:

- (id) init
{
    [super init];
    dictobj = [[NSMutableDictionary alloc] init];
    return self;
}

и освободить память в -dealloc:

- (void) dealloc
{
    [dictobj release];
    [super dealloc];
}

Вы можете получить доступ к переменным вашего экземпляра в любом месте вашей реализации экземпляра (в отличие от методов класса):

-(void) methodA
{
    // don't declare dictobj here, otherwise it will shadow your ivar
    [dictobj setObject: @"Some value" forKey: @"Some key"];
}

-(void) methodB
{
    // this will print "Some value" to the console if methodA has been performed
    NSLog(@"%@", [dictobj objectForKey: @"Some key"]);
}
0 голосов
/ 17 февраля 2010
-----AClass.h-----
extern int myInt;  // Anybody who imports AClass.h can access myInt.

@interface AClass.h : SomeSuperClass
{
     // ...
}

// ...
@end
-----end AClass.h-----


-----AClass.h-----
int myInt;

@implementation AClass.h
//...
@end
-----end AClass.h-----
...