Не делай то, что ты только что сделал. Подумайте о том, что происходит, когда вы делаете это:
Shape *shape = ...;
Rectangle *rect = [[Rectangle alloc] initWithShape:shape];
Во второй строке выделяется экземпляр Rectangle
. Затем возвращаемое значение для initWithShape
снова равно shape
, поэтому новое Rectangle
, которое мы только что выделили, было пропущено!
Приведение к id
также не требуется - любой объект Objective-C может быть неявно приведен к id
.
Мне не совсем понятно, что вы пытаетесь сделать. Возможно, если бы вы уточнили свой вопрос, я мог бы сказать вам, что вы должны делать.