Objective c 如何在Objective C中设置常量实例变量?

Objective c 如何在Objective C中设置常量实例变量?,objective-c,constants,Objective C,Constants,我想创建一个名为“Circle”类的实例变量“pi”,并将其值设置为3.14,作为一个常量,一旦设置就不能更改,继承Circle类的类也将获得pi变量,而无需每次设置其值 我的代码: #import <Foundation/Foundation.h> @interface Circle: NSObject { const double pi = 3.14; } @property float radius; -(float) area; -(float) perime

我想创建一个名为“Circle”类的实例变量“pi”,并将其值设置为3.14,作为一个常量,一旦设置就不能更改,继承Circle类的类也将获得pi变量,而无需每次设置其值

我的代码:

#import <Foundation/Foundation.h>

@interface Circle: NSObject

{

const double pi = 3.14;

}


@property float radius;

-(float) area;

-(float) perimeter;

@end
#导入
@接口圆:NSObject
{
常数双pi=3.14;
}
@属性浮动半径;
-(浮动)面积;
-(浮动)周长;
@结束

如果它不是任何特定实例所特有的东西,我可能会使用
属性(或类方法):

然后我将实现一个自定义getter来返回有问题的值:

+ (double)pi {
    return M_PI;
}
或者,如果它涉及复杂的计算,那么您可以使用
dispatch\u 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;
}
- (float)area {
    return self.radius * self.radius * [Circle pi];
}

- (float)perimeter {
    return self.radius * [Circle pi] * 2.0;
}