As far as I know, it's a pointer to the superclass. It's hard-wired with the superclass, and not dynamically figured out at runtime. Would like to know it more in detail...
Anyone?
As far as I know, it's a pointer to the superclass. It's hard-wired with the superclass, and not dynamically figured out at runtime. Would like to know it more in detail...
Anyone?
Essentially, it allows you to use the implementations of the current class' superclass.
For the gritty details of the Objective-C runtime:
[super message]
has the following meaning:
When it encounters a method call, the compiler generates a call to one of the functions objc_msgSend, objc_msgSend_stret, objc_msgSendSuper, or objc_msgSendSuper_stret. Messages sent to an object’s superclass (using the super keyword) are sent using objc_msgSendSuper; other messages are sent using objc_msgSend. Methods that have data structures as return values are sent using objc_msgSendSuper_stret and objc_msgSend_stret.
So yes, it is static, and not determined at runtime.
It's a keyword that's equivalent to self
, but starts its message dispatch searching with the superclass's method table.
super
is not a pointer to a class. Super is self
, but when used in a message expression, it means "look for an implementation starting with the superclass's method table."
These blog postings on what is a meta class?, getting subclasses and classes and metaclasses may give you some insight on the internals of this.
© 2022 - 2024 — McMap. All rights reserved.
super
behaves oddly (or "normally", if you think that way) in categories. That is, it treats the category as a subclass (not an override), sosuper
is then the original, unmodified class. Sort of. Sometimes. "It's complicated." – Precedent