プロパティ、合成、宣言とObjective Cのint []配列の実装
-
06-09-2019 - |
質問
どのようにプロパティを設定し、宣言し、合成、とObjective Cでサイズ5のint配列を実装していますか?私は、iPhoneアプリのために、このコードを書いています。おかげます。
解決
私が行うには、「ココア-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;
}
他のヒント
ここで試して何か。 .hファイルでます:
@property int* myIntArray;
次に、.mファイルでます:
@synthesize myIntArray;
あなたは@synthesizeを使用する場合は、あなたが)(おそらく初期化時に、配列のcalloc / malloc関数に自分自身をする必要があります。
また、あなたはあなた自身のアクセサ関数を記述し、配列が割り当てられている前に呼び出された場合、それらは、malloc関数/のcallocを持つことができます。
いずれにせよ、あなたはにdealloc()メソッドでは、配列を解放することをお勧めします。
私はちょうどのObjective Cの上に自分自身をランプアップしてるので、これは、おそらく、ナイーブと間違っている、これまでのところ、それは私のために働いているようだ。
あなたは、このケースではint型を使用しないでください。 NSNumberを使用し、NSMutableArrayのにそれらの5 NSNumbersを入れます。
@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試験せず)とのインタフェースおよび実装するためのコードです。あなたは何を達成しようとしているの?
私はクラス変数を持っています:
NSInteger myInt[5];
私は私のコードで正常ミン[1] = 0の構文を使用できるように、は、Iは、整数ポインタを返すプロパティを作成します:
@property (nonatomic, readonly) NSInteger *myInt;
は、その後、次のgetterメソッドを作成します:
-(NSInteger *) myInt {
return myInt
}
今、私はclass.myIntのようなものを使用することができます[1] = 0;
まあ、私はこの作品を確かに知りませんが、それはいるようです。私は他の誰かがそれを試してみたい場合、私はそこにこれを出すだろうと思ってます。
何をするにしても、あなたは結果を認識する必要があります。
整数配列を計数参照されていません。あなたはそれにアクセスしているどのように多くの人を知りません。あなたはそれを解放し、いつすべきか分かりません。だから、非常に簡単* int型のプロパティを持つことができます。セッターは、ポインタを取得し、インスタンス変数にそれを格納します。ゲッターは、インスタンス変数の内容を返します。それだけで動作します。
配列が割り当てまたは割り当て解除する必要がありますしかし、あなたが知っていません。あなたは(たとえば数字を含む四つの異なるテーブル)、問題はないが、いくつかの静的な配列を持っている場合。あなたはmalloc関数と整数の配列を作成した場合でも、()、誰かが)(それを解放する必要があります。だから、ときこれが起こるために起こっていますか?
手動でのアレイの寿命を処理するために持つことはゴミであるので、、私はあなただけのNSNumberのNSArrayのどちらかを使用することをお勧めしたい、またはあなたがNSPointerArrayを見て参照カウントして整数の配列を格納するために悪用されることができ、または前の回答で宝くじクラス、より柔軟なちょうどビットのように独自のクラスを作成します。