Short answer
Since Objective-C objects can only be allocated in a heap and managed as pointers.
Long answer
Objective-C requires classes to be allocated on a heap and treated as pointers because polymorphism requires the use of pointers, because a pointer to an interface will always be the same size, while different implementations of the interface may have different sizes. In C ++, you can use both automatic (stack) and dynamic (heaps) storage for classes; however, in the first case, you should beware of slicing (when a derived type is assigned to the base type, as a result of which the object loses content that makes it a derived type instead of the base type) and using pointers only eliminates this potential trap in Obj-C. In addition, the allowed objects associated with the stack complicate the reference counting scheme that takes place with Objective-C, and since the objects located on the stacklive only in the area in which they are created, in any case, objects on the heap are usually allocated, and this would be the ultimate benefit for supporting objects in the form of values distributed over the stacks. As a note, it should be mentioned that in both Java and C #, objects are likewise limited to allocating only heaps.