Objective Cで、宣言、プロパティの設定、合成、およびサイズ5のint配列の実装方法を教えてください。私はこのコードをiPhoneアプリ用に書いています。ありがとう。Objective Cのint []配列の宣言、プロパティ、合成、実装
答えて
私が行うには、「ココア-Y」の事は、あなたが内部的にそれを使用する場合でも、int配列を隠していると思います。何かのように:
@interface Lottery : NSObject {
int numbers[5];
}
- (int)numberAtIndex:(int)index;
- (void)setNumber:(int)number atIndex:(int)index;
@end
@implementation Lottery
- (int)numberAtIndex:(int)index {
if (index > 4)
[[NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"Index %d is out of range", index] userInfo:nil] raise];
return numbers[index];
}
- (void)setNumber:(int)number atIndex:(int)index {
if (index > 4)
[[NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"Index %d is out of range", index] userInfo:nil] raise];
numbers[index] = number;
}
それは過剰です。 C配列を使用します。 –
どうすればいいですか?私はそれが元々int配列でやっていたことだと思います。 –
*はC配列、Rogerを使用しています。しかし、それは本当にココアのインターフェイスに属していないmemcpyと低レベルの細部のすべての面倒を取り除きます。 – Chuck
この場合、配列を使用する場合はintを使用しないでください。 NSNumberを使用し、それらの5つのNSNumberをNSMutableArrayに配置します。
@interface testClass: NSObject {
NSMutableArray* numbers;
}
@property (nonatomic, retain) NSMutableArray* numbers;
-(id)initWithValue:(NSNumber *)initialValue;
@end
@implementation testClass
@synthesize numbers;
-(id)initWithValue:(NSNumber *)initialValue {
numbers = [[NSMutableArray alloc] initWithCapacity:5];
[numbers addObject:initialValue];
return self;
}
@end
インターフェイスと実装のコードはsynthesize(テストされていないBTW)であるかどうか。あなたは何を達成しようとしていますか?
迅速な対応に感謝します。私がintの配列を使いたい理由は、1:1000の間に5つのランダム/ユニークな数値を格納しようとしていることです。これはNSMutableArrayを使うとはるかに難しいようです。何を指示してるんですか? –
ああ、おそらくforループでintArray [i] == intArray [i-1]が失敗したかどうかをチェックしますか?確かにobjcオブジェクトを使用するとオーバーヘッドが増えますが、int []を使うほうが良いかもしれません。数値を生成するメソッドで整数配列をローカル変数として保持できますか?それとも、クラスのアクセス可能なプロパティである必要がありますか? – ryanday
クラスがMVCのモデルの一部であるため、インスタンス変数にしたいです。しかし、サイズがわずか5であれば余分なオーバーヘッドが大きくなりますか? –
私はクラス変数があります。だから私は私のコードでは、通常のミント[1] = 0の構文を使用することができることを
NSInteger myInt[5];
を、私は整数のポインタを返すプロパティを作成しました:
-(NSInteger *) myInt {
return myInt
}
0123:次に
@property (nonatomic, readonly) NSInteger *myInt;
は、次のgetterメソッドを作成しました
私はclass.myInt [1] = 0のようなものを使うことができます。
これは確かにわかりませんが、そう思われます。私はちょうど誰かがそれを試してみたい場合、私はこれをそこに置くと思った。
ここに試してみましょう。 .hファイルで:
@property int* myIntArray;
その後、.mファイルに:あなたは@synthesizeを使用している場合
@synthesize myIntArray;
は、あなたが(おそらく初期化時に、配列自身のcalloc/malloc関数する必要があります)。
また、配列が割り当てられる前に呼び出された場合は、独自のアクセサー関数を記述してmalloc/callocを呼び出すこともできます。
いずれにしても、dealloc()メソッドで配列を解放したいと思うでしょう。
私はObjective Cで自分自身を立てているので、これはおそらく素朴で間違っていますが、これまでのところ私のために働いているようです。
+1すばらしい最初の答え! – bakoyaro
何をしても、その結果に気づく必要があります。
整数配列は参照カウントされません。どれくらいの人がアクセスしているのか分かりません。それをいつ誰が割り振るべきか分かりません。したがって、int *型のプロパティを簡単に持つことができます。 setterはポインタをとり、それをインスタンス変数に格納します。ゲッターはインスタンス変数の内容を返します。それだけで動作します。
ただし、配列の割り当てまたは割り当て解除をいつ行うべきか分かりません。いくつかの静的配列(例えば、数字を含む4つの異なるテーブル)がある場合は問題ありません。しかし、malloc()で整数の配列を作成する場合は、誰かがfree()しなければなりません。だからこれはいつ起こるのだろうか?
配列の寿命を手作業で処理するのはゴミであるため、NSNumberのNSArrayを使うか、NSPointerArrayを参照することをお勧めします。前回の回答では、宝くじクラスのような独自のクラスを作成しました。ちょっと柔軟性があります。
- 1. Objective-C - メソッド宣言でポインタの配列を実装する方法
- 2. Objective-Cのスタックベースの配列宣言ですか? Objective-Cで
- 3. Objective-C:実装なしの@property宣言(@synthesize)
- 4. c#配列宣言構文vs C++配列宣言構文
- 5. Objective C:実装ファイルで宣言されたIVarsを持つARC
- 6. プロパティ - Objective-Cでの変数の実装
- 7. OBJECTIVE-C intの配列を持つスタック
- 8. 配列サイズの宣言Cの場合の違いやC++
- 9. のObjective-Cプロトコルフォワード宣言
- 10. Objective-Cで2D配列を宣言するには?
- 11. cの文字列配列宣言
- 12. Objective CでNSObjectsのNSArrayのプロパティを宣言する方法
- 13. クラス実装のプライベートプロパティ宣言?
- 14. グローバル配列の宣言と使用c#
- 15. C charの配列を宣言する*
- 16. 最小値intで配列を実装
- 17. 定義されたivarを作成するObjective-C宣言されたプロパティ?
- 18. Objective-Cの前方宣言enum
- 19. 配列の型宣言
- 20. objective-cインターフェイス - 変数を宣言するだけのプロパティですか?オブジェクト - C IN
- 21. Objective-Cの配列
- 22. GNU C++での文字列配列の宣言
- 23. :@ID INTを宣言
- 24. intとsigned int宣言の違い
- 25. intを宣言し、objective-cでforループを倍にするには?
- 26. クリーナーのプロパティ宣言
- 27. 配列宣言文字列を書く
- 28. 配列宣言の相違点
- 29. C言語で巨大な配列をローカルに宣言する
- 30. Objective CのネームスペースC++クラスの前方宣言
この手順を踏むことができない場合は、実際にCocoaプログラミングに関するAaron Hillegasの本を手に入れる必要があることを心からお勧めします。 – KevinDTimm
私は、NSMutableArrayを使用することで逃げることができ、サイズが5で固定されているので、5つの独立したintを持つことができることを知っていますが、intの配列を持つ方がずっと優雅です。私はまた、将来のためにどのように知りたいのですか?私はいくつかの他の言語で書いてきましたが、私はアイフォーン用の目的のCでそれを行う方法についての決定的な答えを見つけることができないようです。 –