Я искал похожие темы, но пока не повезло, так что вот так:
В классе Objective-C я объявил переменную экземпляра указателя int
для хранения массива int
:
@interface MyList : NSObject {
int index; // A simple int to hold an index reference
NSString *name; // The name of the list
int *bookList; // A pointer to an int array that holds a list of numbers
}
@property (nonatomic) int index;
@property (nonatomic, copy) NSString *name;
@property (nonatomic) int *bookList;
@end
Я проверил это следующим образом, и все данные, содержащиеся в переменных экземпляра, были правильно сохранены и отображены с помощью операторов NSLog
:
MyList *aList = [[MyList alloc] init];
[aList setIndex:1];
[aList setName:@"ListOne"];
[aList setBookList:(int []){1, 2, 3, 0}];
NSLog(@"Show MyList object's data after object is populated");
NSLog(@"[%d]: %@", aList.index, aList.name);
for (int i = 0; i < 4; i++) {
NSLog(@"bookList[%d] = %d", i, aList.bookList[i]);
}
Однако , когда я отправляю этот объект в качестве аргумента методу и пытаюсь напечатать содержимое массива int
, я получаю странные числа, и то же самое происходит после возврата из метода :
-(void)displayMyList:(MyList *)theList {
NSLog(@"Show MyList object's data in displayMyList method");
NSLog(@"[%d]: %@", theList.index, theList.name);
for (int i = 0; i < 4; i++) {
NSLog(@"bookList[%d] = %d", i, theList.bookList[i]);
}
}
Я не знаю, что не так с моим тестовым кодом, поскольку значения переменных экземпляра index
и name
не изменяются при отправке объекта в метод displayMyList:
. Я пошагово отлаживал, и указатель на массив int
все время указывает на один и тот же адрес, поэтому кажется, что где-то есть побочный эффект, который изменяет значения массива, или я не понимаю, как размещается память для этого типа указателей на int
массивы. Может быть, это просто какая-то арифметика указателей, которую я не понимаю, потому что я не видел этого ни в одной из книг по программированию для iPhone, которые у меня есть.
Я хотел реализовать массив int
, потому что математика, которую я делаю с ним, очень проста, и казалось, что использование NSArray
было излишним (если этот подход не работает, я всегда могу пойти с NSArray
хотя).