Я просто размышляю:
Я думаю, что переменная, определенная в ivars, выделяет пространство прямо в объекте. Это мешает вам создавать методы доступа, потому что вы не можете передать массив по значению функции, но только через указатель. Поэтому вы должны использовать указатель в ivars:
int *doubleDigits;
А затем выделите для него место в init-методе:
@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];