2011-06-23 2 views
0

Я пытаюсь нарушить законы объективных С немного имея статический (уровень класса) переменный, которые имеют сеттер и добытчик:Это хороший способ иметь переменные-члены класса?

+(CGRect*)defaultOpFr:(CGRect*)set{ 
    static CGRect * defaultOpFr = nil; 

    if (set) { 
     if (!defaultOpFr) { 
      defaultOpFr = malloc(sizeof(defaultOpFr)); 
     } 
     defaultOpFr->size.width = set->size.width; 
     defaultOpFr->size.height = set->size.height; 
     defaultOpFr->origin.x = set->origin.x; 
     defaultOpFr->origin.y = set->origin.y; 
    } 
    return defaultOpFr; 
} 

Это похоже на работу, но мне интересно, если есть лучше путь. Идея состоит в том, чтобы вызвать его с помощью nil для извлечения значения, вызвать его с помощью CGRect для установки нового значения.

+0

В Objective-C нет переменных-членов. – bbum

ответ

2

Yup; это будет работать, но будет полностью против какой-либо общей картины.

Почему у вас просто нет стандартной пары сеттер/геттер? Даже на уровне класса это нормально:

static CGRect barf; 
+ (CGRect) barf { return barf; } 
+ (void) setBarf:(CGRect)aRect { barf = aRect; } 

Выполнено.

+0

И еще более извращенно, следуя соответствующим соглашениям об именах, вы можете технически выполнять «CGRect r = MyClass.barf;» и «MyClass.barf = r;». Не то, чтобы вы когда-либо * должны * (потому что синтаксис точки - это мерзость, которая оскверняет красивое море квадратных скобок и т. Д. И т. Д.), Но вы могли бы ... –

+0

Yup; хотя некоторые компиляторы будут немного нервничать при компиляции точечного выражения с приемником класса .... – bbum

+0

Я не могу объявить статический CGRect barf; 'вне функции, хотя я попытался поместить его с переменными-членами и рядом с объявлениями функций. Как получить статическую переменную, которая доступна для обеих функций? Мне нравится твоя лучше, но я не могу заставить ее работать. –

Смежные вопросы