声明,属性,合成,和实施INT []在目标C阵列
-
06-09-2019 - |
题
你如何声明,设置属性,合成,和执行大小为5的目标C 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,你需要的malloc /数组自己释放calloc,初始化大概在()。
另外,你可以写自己的存取功能,并让他们的malloc /释放calloc如果阵列已分配之前调用。
无论哪种方式,你要释放阵列中的dealloc()方法。
这可能是幼稚和错误的,因为我只是在斜坡上升对目标C自己,但到目前为止,这似乎是为我工作。
如果你想使用数组你不应该在这种情况下使用int。使用的NSNumber和把这些5个NSNumbers成一个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测试)的代码。什么是你要完成?
我有一个类变量:
NSInteger myInt[5];
,这样我可以使用普通的敏[1] = 0的语法在我的代码,我创建的返回一个整数指针一个属性:
@property (nonatomic, readonly) NSInteger *myInt;
然后创建以下getter方法:
-(NSInteger *) myInt {
return myInt
}
现在我可以使用像class.myInt [1] = 0;
好了,我不知道这肯定的作品,但它似乎。我只是觉得应该把这个在那里,如果别人想尝试一下。
不管你做什么,你必须知道的后果。
一个整数阵列未被引用计数。你不知道有多少人访问它。你不知道谁应该释放它和时间。所以,你可以很容易有一个int类型的属性*。 setter方法将采取一个指针,并将其存储到实例变量。吸气将返回实例变量的内容。这只是工作。
然而,你不知道什么时候该阵列应分配或释放。如果你有一些静态数组(例如包含数字的四个不同的表),没有问题。但是,如果你创建一个整数使用malloc数组(),有人应该释放()它。所以,当这是怎么回事发生?
由于不必手动处理的阵列的寿命是垃圾,我建议你要么只是使用的NSNumber的一个NSArray,或你看NSPointerArray其可以被滥用于整数的存储阵列,参考计数,或你创建自己的类象在前面的回答彩民类,只是一个更灵活一点。