Objective Cでサイズ5のint配列をどのように宣言、設定、合成、および実装しますか?私はiphoneアプリ用にこのコードを書いています。ありがとう。
5 に答える
「Cocoa-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 を使用する場合、おそらく init() 中に、自分で配列を malloc/calloc する必要があります。
または、独自のアクセサー関数を作成し、配列が割り当てられる前に呼び出された場合はそれらを malloc/calloc にすることもできます。
いずれにせよ、dealloc() メソッドで配列を解放する必要があります。
私自身、Objective C を立ち上げたばかりなので、これはおそらく素朴で間違っていますが、これまでのところ、私にとってはうまくいっているようです。
配列を使用する場合は、この場合に 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 はテストされていません)。何を達成しようとしていますか?
クラス変数があります:
NSInteger myInt[5];
コードで通常の myInt[1]=0 構文を使用できるように、整数ポインターを返すプロパティを作成しました。
@property (nonatomic, readonly) NSInteger *myInt;
次に、次の getter メソッドを作成しました。
-(NSInteger *) myInt {
return myInt
}
これで、class.myInt[1]=0; のようなものを使用できます。
まあ、これがうまくいくかどうかはわかりませんが、うまくいくようです。他の誰かが試してみたいと思ったら、これを公開しようと思いました。
Whatever you do, you must be aware of the consequences.
An integer array is not reference counted. You don't know how many people are accessing it. You don't know who should deallocate it and when. So you can quite easily have a property of type int*. The setter will take a pointer and store it into the instance variable. The getter will return the contents of the instance variable. It just works.
HOWEVER you don't know when the array should be allocated or deallocated. If you have some static arrays (for example four different tables containing numbers), no problem. But if you create an array of integers with malloc (), someone should free () it. So when is this going to happen?
Because having to handle the lifetime of an array manually is rubbish, I'd recommend that you either just use an NSArray of NSNumber, or you look at NSPointerArray which can be abused to store arrays of integers with reference counting, or you create your own class like the Lottery class in a previous answer, just a bit more flexible.