What exactly is super in Objective-C?

橙三吉。 提交于 2019-11-26 05:27:03

问题


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?


回答1:


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.




回答2:


It's a keyword that's equivalent to self, but starts its message dispatch searching with the superclass's method table.




回答3:


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."




回答4:


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.



来源:https://stackoverflow.com/questions/3095360/what-exactly-is-super-in-objective-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!