Глобальная переменная в программе Objective-C

Я хочу сохранить число как глобальную переменную. Какой синтаксис я использую, и как другие части моего приложения могут получить доступ к этой переменной?

Ответ 1

Для стандартной глобальной переменной (не стойкой, когда приложение завершается и перезапускается) добавьте это в заголовочный файл (*.h) по вашему выбору:

extern NSInteger MYGlobalVariable;

Затем поместите это в файл реализации; (*.m, *.c, *.cpp):

MYGlobalVariable = 0;  // Or any other default value.

Вот как вы делаете глобальную переменную хлеб и масло.

Ответ 2

Вы, вероятно, захотите использовать NSUserDefaults для этого:

Из любого места вашего кода вы можете установить значение для ключа:

int userAge = 21; // Just an example

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:[NSNumber numberWithInt:userAge] forKey:@"age"];
    [standardUserDefaults synchronize];
}

И верните его из любого другого места:

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSNumber *age = nil;

if (standardUserDefaults) 
    age = [standardUserDefaults objectForKey:@"age"];

userAge = [age intValue]

Вы также можете установить начальное значение:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary
    dictionaryWithObject:[NSNumber numberWithInt:13] forKey:@"age"];

[defaults registerDefaults:appDefaults];

Кроме того, если у вас есть сложные данные, вы можете создать класс-оболочку с сеттерами и получателями.

Ответ 3

Определите переменную в файле AppDelegate.h. Создайте свойство в файле .h

@property (retain, nonatomic) NSString *str;

Затем синтезируется файл AppDelegate.m;

@synthesize str;

Позже определите переменную в файле проекта prefix.pch

#define DELEGATE ((AppDelegate*)[[UIApplication sharedApplication]delegate])

Используйте значение в любом месте проекта

AppDelegate *a = DELEGATE;
a.str = @"value";
NSLog(@"value of variable str : %@",a.str);

Ответ 4

Чтобы сделать переменные, которые могут видеть все файлы в Objective c

например, вы хотите установить свой базовый url один раз и в каждом классе вы добавите к нему дополнительные строки,

перейдите в файл main.m, потому что это место, которое увидит это приложение. затем вне основной функции, поместите свой базовый url

NSString *baseurl = @"staging.nabdanet.com";

int main(int argc, char * argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

и когда вы хотите получить доступ к этому классу, все, что вы будете делать, это,

SomeClass.m

extern NSString *baseurl;

с тем же именем в обоих;)

Ответ 5

Для постоянных vars используйте NSUserDefaults. Это записывается в файл в песочнице приложений. Для сессионных варов (non-persistent) я использую singleton-класс с свойством NSMutableDictionary для хранения переменных.

Ответ 6

Чтобы объявить глобальную переменную в objective-C или Swift, вы просто объявляете ее вне области действия любого класса/интерфейса.

Objective-C:

#import "headerFile1.h"
#import "headerFile2.h"

BOOL isTrue = true;
int x = 1;

@interface exampleInterface (){
...  
}
@end

@implementation exampleClass
...

isTrue= false; // can be used in the same way anyplace in your code
x=3; // anyplace means anyplace, even from other controllers
@end

Swift:

import UIKit

var x=45;

class SomeClass {
... 
x=0; // This is also available from anyplace in your project
...
}