On 2013-12-04 12:43, Michel Fortin wrote:

The pointer magic for NSNumber is pretty much inconsequential: it just
means you need to use the runtime functions everywhere, such as
objc_getClass to get a pointer to the class object instead of
dereferencing the object yourself. But it's a detail to keep in mind.

A big change in the modern runtime is that classes are completely
non-fragile, in that you can add a member in a superclass without
breaking binary compatibility with derived classes. Which means that
instance variables are accessed differently, by checking a global
constant to find the right offset (initialized when first loading the
class). I think the compiler also has to emit that constant that the
runtime will initialize.

Another big change is exception handling which now piggyback on the C++
exception mechanism instead of using the inefficient longjump
implementation of the previous runtime.

There's an optimized path for calling certain methods using a virtual
table, but we can skip that in a first release as it's an optimisation
(objc_msgSend still work fine in every case).

Beside that, they changed all the section names for the binary output,
and probably did a some alterations to the binary structure I'm
forgetting right now.

What I actually was asking is if there's any difference in the 32bit modern runtime as used by iOS and the 64bit modern runtime? Except for the usual differences that exists in C.

--
/Jacob Carlborg

Reply via email to