如何在Objective C中声明,设置属性,合成和实现大小为5的int数组?我正在为iPhone应用程序编写此代码。感谢。
答案 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)。你想要完成什么?
答案 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类,只是更灵活一点。