2

基本的な問題文:

参照によって 10 進数を渡す必要があるアプリで、ポインターの空想を行うには十分な理由があります。

だから私は多くの小数を格納するクラスを持っているので、次のようなプロパティがあるとしましょう:

@property (nonatomic) double myDecimalValue;

他のクラスへの参照渡しをしたい。

[someOtherObject sendMyDecimalByReference:&myDecimalValue];

しかし、問題が発生!実際に書かなければならない方法は(プロパティであるため)

[someOtherObject sendMyDecimalByReference:&decimalOrigin.myDecimalValue];

これは、objective-c でのコンパイルに失敗します

私は次のように書くことでそれを回避します

- (double *) myDecimalValueRef;

[someOtherObject sendMyDecimalByReference:[decimalOrigin myDecimalValue]];

私はこれらの小数を何十も持っていることを除いて、すべての値に対してそのばかげたラッパー関数を書きたくありません。

ゲッター関数だけを使用してObjective-Cでこれを行う簡単な方法はありますか?

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 に答える