Это приведение, в данном случае приведение вниз (даже потому, что приведение вверх неявно).
Приведение - это операция, которую разработчик выполняет при написании кода, чтобы намекнуть компилятору, что тип уже, чем тот, о котором думает компилятор.
Подумайте о следующей ситуации:
Class *a = [[Subclass alloc] init];
Subclass *b = a;
(предположим, что Subclass
является подклассом Class
)
Это не скомпилируется, потому что a
статически определен с типом, который не содержится в подклассе. Но назначение не создаст никаких проблем динамически, потому что a
используется для хранения Subclass
объекта на практике.
Так что вы делаете? Вы помещаете приведение Subclass *b = (Subclass*)a;
, чтобы сказать компилятору «доверяйте мне и игнорируйте проверку типов при выполнении этого назначения, я утверждаю, что оно будет действительным во время выполнения», и вы автоматически удаляете ошибку компиляции. Применение такого поведения, конечно, удаляет безопасность типов из вашего кода, поэтому вы должны знать, что вы делаете.
Конечно, чтобы понять значение приведения в этой ситуации, вы должны хотя бы знать о наследовании и объектах ..
В вашей конкретной ситуации возвращаемым типом метода +(id)insertNewObjectForEntityForName:...
является id
, который является наименее конкретным видом объекта в ObjectiveC, его всегда нужно привести к чему-либо, если он не хранится, как обычный id