Требуется ли когда-либо приведение для объекта в NSNotification? - PullRequest
2 голосов
/ 13 октября 2011

Когда я получаю NSNotification, нужно ли мне когда-либо разыгрывать notification.object? Предположим, я знаю, notification.object будет экземпляром MyClass, и я делаю следующее:

MyClass *myClass = notification.object;

Требуется ли здесь какое-либо приведение? Чем отличается указанное выше назначение от:

MyClass *myClass = (MyClass *)notification.object;

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

Нет, это совершенно ненужно и ничего не меняет в поведении вашей программы. Приведение происходит только во время компиляции, а в случае указателей используется только для того, чтобы убедиться, что вы знаете, какой тип объекта.

Компилятор может пожаловаться на присвоение, если вы, например, устанавливаете переменную типа Subclass в результате метода, который возвращает тип Superclass, где вы знаете, что фактический объект, который вы собираетесь получить спина имеет тип Subclass. В этом случае вы бы бросили на подкласс. Например.,

MyViewController * vc = (MyViewController *)[someWindow rootViewController];

Тип notification.object - это id, универсальный указатель объекта, и компилятор очень рад назначить такой указатель для любого другого типа указателя.

2 голосов
/ 13 октября 2011

Нет.Objective-C не требует приведения типа id к другому типу объекта.

...