использование статических переменных c в классах Objective C - PullRequest
1 голос
/ 28 мая 2011

у меня есть вспомогательные функции C в некоторых классах Objective C. Только что обнаружил, что значения глобальных статических переменных C, которые я использую в этих функциях, распределяются между экземплярами класса (duh), а это не то, что я хочу.

Есть ли способ объявить эти переменные локальными для экземпляров класса, чтобы они были видны вспомогательным функциям, не передавая их явно?

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

хотите избежать вызовов методов, где это необходимо

логически разделите его так, чтобы код низкого уровня был на c или c ++, затем добавьте необходимые данные в ваш класс objc:

/* c example */

typedef struct t_generator {
    UInt32 a;
} t_generator;


static void Generate(t_generator* const gen) {
    /.../   
}

@interface MONObjCGeneratorContainer : NSObject
{
    t_generator generator;
    NSString * name;
    UInt32 b;
}
@end

если интерфейс данных настолько прост, вы можете просто получить к ним доступ из экземпляра:

- (void)method { GenerateB(&b); }

, который должен соответствовать всем требованиям, которые вы опубликовали (пока).

2 голосов
/ 28 мая 2011

Есть ли способ объявить эти переменные локальными для экземпляров класса

Конечно, сделать их переменными экземпляра.

Но:

чтобы они были видны вспомогательным функциям без явной передачи их?

Вы можете передать объект в функцию.Если у вас есть соответствующие средства доступа, функция может их получить.И если у вас есть мутаторы, он также может их модифицировать.

Но если вы делаете это, вы можете просто создать метод и автоматически получить доступ к переменным экземпляра.

...