2011-06-23 46 views
0

我想稍微具有静态(类级别),其具有getter和setter方法变量违反客观C的规律:这是拥有类级别成员变量的好方法吗?

+(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

是的;这会起作用,但完全可以反对任何一种常见模式。

你为什么不简单地有一个标准的setter/getter对?即使在课堂上,也没有问题:

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

完成。

+0

甚至更​​为不利的是,按照适当的命名约定,你可以在技术上做'CGRect r = MyClass.barf;'和'MyClass.barf = r;'。并不是说你应该*(因为点语法是玷污方括号等美丽海洋的憎恶),但你可以... –

+0

是的;尽管一些编译器在使用类接收器编译点表达式时会有点紧张的抽象... – bbum

+0

虽然我不能在函数外部声明'static CGRect barf;',但我尝试将它与成员变量并且紧挨着函数声明。如何获得两个函数的范围内的静态变量?我更喜欢你的,但我无法使它工作。 –

相关问题