Базовая модель объектов Java и Objective C от Apple на самом деле одинакова и имеет все объекты в куче и доступна через указатели.
Разница в том, что в Java указатели скрыты, поэтому (ObjectA) objB является указателем на данные типа ObjectA. В Objective C указатель является явным, и вам нужно сказать (MyObj *) returnMyObject {}
id - это указатель на объект (так же исключение в том, что указатель неявный, как Java)