基本问题陈述:
我有一个很好的理由在应用程序中做一些指针幻想,我需要通过引用传递小数。
所以我有一个存储许多小数的类,所以假设有一个属性:
@property (nonatomic) double myDecimalValue;
我想通过引用传递给其他类。
[someOtherObject sendMyDecimalByReference:&myDecimalValue];
但是,出现了一个问题!实际上必须写的方式(因为它是一个属性)是
[someOtherObject sendMyDecimalByReference:&decimalOrigin.myDecimalValue];
这无法在objective-c
中编译我通过编写以下内容来解决这个问题
- (double *) myDecimalValueRef;
[someOtherObject sendMyDecimalByReference:[decimalOrigin myDecimalValue]];
除了我有几十个小数,我不想为每个值编写那个愚蠢的包装函数。
在Objective-C中是否有使用Getter函数的简写方法?
我们假设我有充分的理由不使用NSNumber。
谢谢!
答案 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)