开发者

What exactly is super in Objective-C?

开发者 https://www.devze.com 2023-01-04 14:19 出处:网络
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 de开发者_开发百科tail...

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 de开发者_开发百科tail...

Anyone?


super

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消