在Objective C中声明,属性,合成和实现int []数组

时间:2009-05-26 18:23:22

标签: iphone objective-c arrays primitive

如何在Objective C中声明,设置属性,合成和实现大小为5的int数组?我正在为iPhone应用程序编写此代码。感谢。

5 个答案:

答案 0 :(得分:9)

我认为“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;
}

答案 1 :(得分:2)

这是尝试的东西。在.h文件中:

@property int* myIntArray;

然后,在.m文件中:

@synthesize myIntArray;

如果你使用@synthesize,你可能需要自己malloc / calloc数组,可能是在init()期间。

或者,您可以编写自己的访问器函数,如果在分配数组之前调用它们,则使用malloc / calloc。

无论哪种方式,你都想在dealloc()方法中释放数组。

这可能是天真和错误的,因为我自己只是在提升Objective C,但到目前为止它似乎对我有用。

答案 2 :(得分:0)

如果要使用数组,则不应在此情况下使用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

是用于合成的接口和实现的代码(未经过测试的BTW)。你想要完成什么?

Good quick intro

答案 3 :(得分:0)

我有一个类变量:

NSInteger myInt[5];

因此我可以在我的代码中使用正常的myInt [1] = 0语法,我创建了一个返回整数指针的属性:

@property (nonatomic, readonly) NSInteger *myInt;

然后创建了以下getter方法:

-(NSInteger *) myInt {
  return myInt
}

现在我可以使用类似class.myInt [1] = 0;

的东西

嗯,我不确定这是否有效,但似乎。我只是觉得如果有人想尝试的话我会把它放在那里。

答案 4 :(得分:0)

无论你做什么,你都必须意识到后果。

整数数组不是引用计数。您不知道有多少人正在访问它。你不知道谁应该解除分配以及何时解除分配。所以你可以很容易地拥有int *类型的属性。 setter将获取一个指针并将其存储到实例变量中。 getter将返回实例变量的内容。它只是有效。

但是,您不知道何时应该分配或取消分配数组。如果你有一些静态数组(例如包含数字的四个不同的表),没问题。但是如果你用malloc()创建一个整数数组,有人应该释放()它。那么这什么时候会发生?

因为必须手动处理数组的生命周期是垃圾,我建议你只使用NSNr的NSNrray,或者你看看NSPointerArray可以被滥用来存储引用计数的整数数组,或者你在之前的答案中创建自己的类,如Lottery类,只是更灵活一点。