ここには何もありません。 Cスカラー型の配列のための正式なobjcインターフェースはありません。
std::vector
を使用し、CF/NS-Dataなどのメカニズムを使用してシリアライズ/デシリアライズを実装するのが簡単な方法です(ウェスタンサ)。あなたがにObjCインターフェイスでのstd ::ベクトルをラップすることができ
あなたが望んでいた場合、:
/* MONDoubleArray.h */
/* by using pimpl, i'm assuming you are not building everything as objc++ */
struct t_MONDoubleArray_data;
@interface MONDoubleArray : NSObject < NSCoding, NSCopying, NSMutableCopying >
{
t_MONDoubleArray_data* data;
}
- (double)doubleAtIndex;
- (void)setDoubleAtiIndex:(double)index;
- (NSUInteger)count;
/*...*/
@end
/* MONDoubleArray.mm */
struct t_MONDoubleArray_data {
std::vector<double> array;
};
@implementation MONDoubleBuffer
- (id)init
{
self = [super init];
if (0 != self) {
/* remember your c++ error handling (e.g., handle exceptions here) */
array = new t_MONDoubleArray_data;
if (0 == array) {
[self release];
return 0;
}
}
return self;
}
/*...more variants...*/
- (void)dealloc
{
delete array;
[super dealloc];
}
- (NSData *)dataRepresentationOfDoubleData { /*...*/ }
- (void)setDoubleDataFromDataRepresentation:(NSData *)data { /*...*/ }
/*...*/
@end
を、その後、あなたは手間をかけずにObjC直列化を達成してきたと思います。
@interface MONFloatBuffer : NSObject
{
NSMutableArray * floats;
}
@end
@implementation MONFloatBuffer
- (id)init
{
self = [super init];
if (0 != self) {
CFAllocatorRef allocator = 0; /* default */
CFIndex capacity = 0; /* resizable */
/* you could implement some of this, if you wanted */
const CFArrayCallBacks callBacks = { 0 /* version */ , 0 /* retain */ , 0 /* release */ , 0 /* copyDescription */ , 0 /* equal */ };
floats = (NSMutableArray*)CFArrayCreateMutable(allocator, capacity, &callBacks);
// now we can read/write pointer sized values to `floats`,
// and the values won't be passed to CFRetain/CFRelease.
}
return self;
}
@end
しかし、それはまだ適切にカスタマイズすることなく、自分自身をデシリアライズするために失敗します:
は、ポインタ(または狭い)サイズのエントリを使用して、また、スカラー用CF/NS_MutableArrayを使用する方法があります。だから... NSPointerArrayはをもっと手に入れます。 ...しかし、あなたはまだポインタサイズの値に固定されているので、あなた自身で書く必要があります。それほど難しいことではありません。欠点は、あなたが最終的に結婚する可能性のある変異の数です。
オリジナルのポスターがiPhone/Cocoa-Touch向けに開発されている場合でも、これはココアの問題であるため、「ココア」と付け替えられます。 – westsider