我想创建一个名为“Circle”的实例变量“Circle”并将其值3.14设置为一个常量设置不能更改的常量,继承Circle类的类也将获得pi变量而无需设置每次都有它的价值;
我的代码:
#import <Foundation/Foundation.h>
@interface Circle: NSObject
{
const double pi = 3.14;
}
@property float radius;
-(float) area;
-(float) perimeter;
@end
答案 0 :(得分:1)
如果它不是某个特定实例不是唯一的东西,我可能会使用class
属性(或类方法):
@property (class, readonly) double pi;
然后我实现了一个自定义getter来返回有问题的值:
+ (double)pi {
return M_PI;
}
或者,如果它涉及复杂的计算,那么您可以使用dispatch_once
模式,因此它只计算一次:
+ (double)pi {
static dispatch_once_t once;
static double _pi = 0;
dispatch_once(&once, ^{
// an unnecessary complicated calculation of pi, just to illustrate we'll do this only once
int k = 1;
double previous = 0;
BOOL sign = TRUE;
do {
previous = _pi;
_pi = previous + 4.0 * (sign ? 1.0 : -1.0) / k;
k += 2;
sign = !sign;
} while (fabs(_pi - previous) > 0.0001);
});
return _pi;
}
然后您可以引用此pi
属性:
- (float)area {
return self.radius * self.radius * [Circle pi];
}
- (float)perimeter {
return self.radius * [Circle pi] * 2.0;
}