2

基本问题陈述:

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

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

@property (nonatomic) double myDecimalValue;

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

[someOtherObject sendMyDecimalByReference:&myDecimalValue];

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

[someOtherObject sendMyDecimalByReference:&decimalOrigin.myDecimalValue];

这无法在objective-c中编译

我通过编写以下内容来解决它

- (double *) myDecimalValueRef;

[someOtherObject sendMyDecimalByReference:[decimalOrigin myDecimalValue]];

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

在 Objective-C 中是否有一种仅使用 Getter 函数的速记方法?

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

谢谢!

4

3 回答 3

2

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

@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当您实际取消引用该值时必须保持有效对象,如果您有子类/超类,您将不得不考虑这种设计......

于 2012-12-07T15:53:56.127 回答
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;
于 2012-12-07T15:57:38.223 回答
0

你看过 NSValue 类吗?它允许您将指针作为对象传递。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSValue_Class/Reference/Reference.html

于 2012-12-07T17:43:41.083 回答