美文网首页iOS-Objective-C
OC中方法隐藏参数self的传递

OC中方法隐藏参数self的传递

作者: 追沐 | 来源:发表于2017-09-25 15:49 被阅读23次

在OC代码中,对象通过发送消息,执行一定的操作,[ ]是方法的发起形式。每个方法都会有一个默认的隐藏参数,这里来看看这个默认参数。写此篇总结的主要目的是对OC方法调用隐藏参数进行一下了解和认识。

OC方法传参

调用一个方法,传递一个参数,比如:

- (void)shoppingWithFriend:(Person *)friend;//和某个朋友一起购物,在实现文件的init方法和shopping方法中都打印了self的地址。

该方法传递了一个参数friend,这个参数是Person类型的。和C里面一样,friend是一个形式参数。

OC默认参数传递

在调用一个OC方法的时候,有一个默认的参数会被传递,举个例子来看:

定义一个Person类

@interface Person : NSObject

- (void)shopping;

@end
#import "Person.h"

@implementation Person

- (instancetype)init {
    if (self = [super init]) {
        
        
        NSLog(@"init self :%p",self);
    }
    return self;
}
- (void)shopping {
    
    NSLog(@"shopping self :%p",self);
}

@end

调用

Person *person1 = [[Person alloc] init];

NSLog(@"init 后 :%p",person1);

[person1 shopping];

打印结果:

2017-09-25 15:46:19.977 Class[11573:293345] init self :0x608000015c10
2017-09-25 15:46:19.978 Class[11573:293345] init 后 :0x608000015c10
2017-09-25 15:46:19.978 Class[11573:293345] shopping self :0x608000015c10

分析

打印结果地址是一样的,为什么打印self会有值?是因为在执行alloc init方法和shopping方法的时候,self作为默认参数被传递到了方法体里面。在这里传递的默认参数其实就是“person1”。

其实就是相当于将方法写成下面这样:

- (instancetype)initWithPerson:(Person *)person;

- (void)shoppingWithPerson:(Person *)person;

只是这个默认参数不用我们传递,OC方法中默认传递的而已。所以能在方法中直接拿到self,打印结果也是同一个地址,都是person1的地址。

相关文章

  • OC中方法隐藏参数self的传递

    在OC代码中,对象通过发送消息,执行一定的操作,[ ]是方法的发起形式。每个方法都会有一个默认的隐藏参数,这里来看...

  • quick cocos Lua与OC互相回调,苹果内购机制

    1.在需要调用oc中的lua方法中写入调用oc的接口方法,把参数传递进去给oc层使用 2.在对应oc中的方法中拿到...

  • Object-c 基础详解

    Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值...

  • Objective-C中的self和super理解

    1、self是一个隐藏参数变量 self是一个隐藏参数变量,指向当前调用方法的对象,还有一个隐藏参数是_cmd,代...

  • self

    一、self和_cmd是隐藏参数,在编译期被插入实现代码。self:self是类的一个隐藏参数,每个方法的实现的第...

  • iOS 之self和super区别

    要点: self 调用自己方法,super 调用父类方法 self是类隐藏参数,super是预编译指令 【self...

  • Python 实例方法、类方法和静态方法(转)

    实例方法 实例ik1会传递给self参数,这样self参数就可以引用当前正在调用实例方法的实例。 类方法 Pyth...

  • Objective-C 中 self 和 super

    self 和 super 的区别:self 是类的一个隐藏参数,每个方法的实现的第一个参数即为 self。supe...

  • python3 实例方法,类方法,静态方法,普通函数

    类方法需要@ classmethod 修饰并且有个隐藏参数 cls,实例方法必须有个参数 self, 静态方法必须...

  • self、super、_cmd

    self 是类的隐藏的参数,指向当前当前调用方法的类,另一个隐藏参数是 _cmd,代表当前类方法的 selec...

网友评论

    本文标题:OC中方法隐藏参数self的传递

    本文链接:https://www.haomeiwen.com/subject/eqhdextx.html