如何使用Objective-C中的访问器方法执行指针

时间:2012-12-07 15:24:30

标签: objective-c ios pointers

基本问题陈述:

我有一个很好的理由在应用程序中做一些指针幻想,我需要通过引用传递小数。

所以我有一个存储许多小数的类,所以假设有一个属性:

@property (nonatomic) double myDecimalValue;

我想通过引用传递给其他类。

[someOtherObject sendMyDecimalByReference:&myDecimalValue];

但是,出现了一个问题!实际上必须写的方式(因为它是一个属性)是

[someOtherObject sendMyDecimalByReference:&decimalOrigin.myDecimalValue];

这无法在objective-c

中编译

我通过编写以下内容来解决这个问题

- (double *) myDecimalValueRef;

[someOtherObject sendMyDecimalByReference:[decimalOrigin myDecimalValue]];

除了我有几十个小数,我不想为每个值编写那个愚蠢的包装函数。

在Objective-C中是否有使用Getter函数的简写方法?

我们假设我有充分的理由不使用NSNumber。

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以直接使用和访问实例变量而不是属性吗?然后它的工作方式与C struct成员相同......

@interface SomeClass : NSObject
{
    @public
    double myDecimalValue;
}

// Keep the getter or not, assuming you synthesize it in a way that uses the
// myDecimalValue ivar
@property (nonatomic) double myDecimalValue;

@end

然后你可以这样访问它:

[someOtherObject sendMyDecimalByReference:&decimalOrigin->myDecimalValue];

当然,健壮性是有限的,someOtherObject必须在实际取消引用该值时保持有效对象,如果您有子类/超类,则必须考虑此设计... < / p>

答案 1 :(得分:0)

虽然远非理想,但你可以将ivars公之于众。我讨厌甚至说,但这是一个可能的解决方案。

另一种选择是为每个小数创建一对属性。创建常规属性以及引用属性:

@interface Foo : NSObject
    double _myDecimal;

@property (nonatomic, assign) double myDecimal;
@property (nonatomic, assign) double *myDecimalRef;
@end

@implementation Foo
@synthesize myDecimal = _myDecimal;

- (double *)myDecimalRef {
    return &_myDecimal;
}

- (void)setMyDecimalRef(double *)val {
    _myDecimal = *val;
}

@end

现在你可以这样:

[someOtherObject sendMyDecimalByReference:decimalOrigin.myDecimalRef];

或类似的东西:

*decimalOrigin.myDecimalRef = 3.14;

答案 2 :(得分:0)