加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 是`super`局部变量?

发布时间:2020-12-16 09:28:07 所属栏目:百科 来源:网络整理
导读:// A : Parent@implementation A-(id) init{ // change self here then return it}@end AA *a = [[A alloc] init]; 一个.只是想知道,如果自我是局部变量还是全局?如果它是本地的,那么init中的self = [super init]是什么意思?我可以成功定义一些局部变量并
// A : Parent
@implementation A
-(id) init
{
    // change self here then return it
}
@end A

A *a = [[A alloc] init];

一个.只是想知道,如果自我是局部变量还是全局?如果它是本地的,那么init中的self = [super init]是什么意思?我可以成功定义一些局部变量并使用这样的,为什么我需要将它分配给自己.

-(id) init
{
    id tmp = [super init];
    if(tmp != nil) {
        //do stuff
    }
    return tmp;
}

湾如果[super init]返回一些其他对象实例并且我必须覆盖self,那么我将无法再访问A的方法,因为它将是全新的对象?我对吗?

C.超级和自我指向相同的内存,它们之间的主要区别是方法查找顺序.我对吗?

对不起,没有Mac试试,现在学习理论……

解决方法

Dreamlax的答案是正确的……但是,澄清可能会有所帮助.

a. Just wondering,if self is a local
variable or global? If it’s local then
what is the point of self = [super
init] in init? I can successfully
define some local variable and use
like this,why would I need to assign
it to self.

self不是局部变量.它是方法调用的参数.事实上,第一个论点.第二个参数是_cmd,即正在执行的方法的选择器的名称.

self的特殊之处在于编译器使用self来访问实例变量.也就是说,如果你说self = [super init]并且超类的init碰巧返回不同的东西,那么任何进一步的实例变量访问仍然是正确的.

b. If [super init] returns some other
object instance and I have to
overwrite self then I will not be able
to access A’s methods any more,since
it will be completely new object? Am I
right?

如果super的init返回一个与A不兼容的东西的实例,那么在超类的设计中出现了一些可怕的错误.请记住,Objective-C是完全动态的.因此,没有理由说super的init返回的内容实际上需要是A的一个实例,但它更好地被诅咒好像A的行为.现在,它可能是A的子类的全新实例,因此,A的所有方法都可以正常工作.

在线之间阅读;请记住,Objective-C是完全动态的.没有静态方法调度这样的东西.对象的类可以随时更改,只要新类响应该方法,任何随机方法调用仍然可以工作.并不是说这实际上是在运行时发生的,只是它可以.

c. super and self pointing to the same
memory and the major difference
between them is method lookup order.
Am I right?

现在,这是一个有趣的问题.超级并没有真正指向任何东西.对于所有意图和目的,超级可以被视为这里的一点魔力.也就是说,当编译器将super视为方法调用的目标时,它会将其编译为稍微不同的调用站点,该调用站点调用objc_msgSendSuper()的变体之一 – 顾名思义 – 有效地“搜索”方法的实现从编译调用的类的父类开始.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读