[[NSMutableArray alloc] init]
возвращает id
как упомянуто @CocoaFu. Вы назначаете его указателю, который вы объявили как NSMutableSet
, что является приемлемым из-за возвращенного id
. Как и большинство других языков, просто потому, что вы объявили, что это NSMutableSet
, это не делает его одним.
Так как NSMutableSet
и NSMutableArray
имеют метод с именем -addObject:
, компилятор не предупреждает о вызове неизвестного метода.
В вашем коде нет конкретной ошибки, кроме того, что указатель, как объявлено, является неточным.