Objective-C: полиморфизм в случае NSMutableArray - PullRequest
0 голосов
/ 11 сентября 2011

Я новичок в программировании на Objective-C и, работая над примером, я заметил кое-что любопытное в полиморфизме:

// I know the message should have been mutableCopy, but this is how I came to find
// this ... anomaly
NSMutableArray *arrayCopy = [self.array copy];
[arrayCopy replaceObjectAtIndex:0 withObject:[NSNumber numberWithInt:2]];

Этот код компилируется, однако при запуске приложения происходит сбой.сообщение о том, что arrayCopy не распознает сообщение replaceObjectAtIndex: withObject:.

Мой вопрос заключается в том, почему эта компиляция вообще должна создаваться (и она не генерирует предупреждение / проблему при анализе)?Учитывая, что NSMutableArray наследуется от NSArray, как может быть допустимым присвоение arrayCopy возвращенному NSArray?

Заранее спасибо.

1 Ответ

3 голосов
/ 11 сентября 2011

Подпись метода для копии

- (id)copy

Это означает, что он возвращает указатель на объект Objective-C, но в противном случае не предоставляет никакой информации о типе компилятору.

Это означает, что компилятор не может предупредить вас о неправильных типах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...