我只是推测:
我认为 ivars 中定义的变量在对象中分配空间。这可以防止您创建访问器,因为您不能按值将数组提供给函数,而只能通过指针。因此,您必须在 ivars 中使用指针:
int *doubleDigits;
然后在 init-method 中为其分配空间:
@synthesize doubleDigits;
- (id)init {
if (self = [super init]) {
doubleDigits = malloc(sizeof(int) * 10);
/*
* This works, but is dangerous (forbidden) because bufferDoubleDigits
* gets deleted at the end of -(id)init because it's on the stack:
* int bufferDoubleDigits[] = {1,2,3,4,5,6,7,8,9,10};
* [self setDoubleDigits:bufferDoubleDigits];
*
* If you want to be on the safe side use memcpy() (needs #include <string.h>)
* doubleDigits = malloc(sizeof(int) * 10);
* int bufferDoubleDigits[] = {1,2,3,4,5,6,7,8,9,10};
* memcpy(doubleDigits, bufferDoubleDigits, sizeof(int) * 10);
*/
}
return self;
}
- (void)dealloc {
free(doubleDigits);
[super dealloc];
}
在这种情况下,界面如下所示:
@interface MyClass : NSObject {
int *doubleDigits;
}
@property int *doubleDigits;
编辑:
我真的不确定是否允许这样做,这些值真的在堆栈上还是存储在其他地方?它们可能存储在堆栈中,因此在这种情况下使用不安全。(请参阅关于初始化列表的问题)
int bufferDoubleDigits[] = {1,2,3,4,5,6,7,8,9,10};
[self setDoubleDigits:bufferDoubleDigits];