Id является экземпляром любого класса, не обязательно того, который наследуется от класса NSObject. В отличие от Java Object, NSObject не является «одним истинным базовым классом», от которого наследуется каждый класс. Так что нет, не все объекты соответствуют протоколу NSObject, то есть <NSObject>
не является избыточным.