美文网首页
Objective-C 碎碎念 6

Objective-C 碎碎念 6

作者: 大地瓜123 | 来源:发表于2017-08-23 14:49 被阅读0次

本文为大地瓜原创,欢迎知识共享,转载请注明出处。
虽然你不注明出处我也没什么精力和你计较。
作者微信号:christgreenlaw


本节探讨SEL类型。

配合对象/类来检查对象/类是否实现了某个方法

SEL sel = @selector(setAge:);
Person *p = [Person new];
// 判断p对象中有没有实现-号开头的setAge:方法
BOOL flag = [p respondsToSelector:sel];
NSLog(@"flag = %i", flag);

// respondsToSelector注意点: 
//如果是通过对象来调用该方法,会判断该对象有没有实现-号开头的方法
//如果是通过类来调用该方法, 那么会判断该类有没有实现+号开头的方法
SEL sel1 = @selector(test);
flag = [p respondsToSelector:sel1];
NSLog(@"flag = %i", flag);

flag = [Person respondsToSelector:sel1];
NSLog(@"flag = %i", flag);

respondsToSelector说白了就是看receiver能不能响应某个方法。

配合对象/类来调用某一个SEL方法

SEL sel = @selector(demo);
Person *p = [Person new];
// 调用p对象中sel类型对应的方法
[p performSelector:sel];

SEL sel1 = @selector(signalWithNumber:);
// withObject: 需要传递的参数
// 注意: 如果通过performSelector调用有参数的方法, 那么参数必须是对象类型, 因为withObject只能传递一个对象
[p performSelector:sel1 withObject:@"13838383438"];

SEL sel2 = @selector(setAge:);
[p performSelector:sel2 withObject:@(5)];
NSLog(@"age = %i", p.age);

// 注意:performSelector最多只能传递2个参数
SEL sel3 = @selector(sendMessageWithNumber:andContent:);
[p performSelector:sel3 withObject:@"138383438" withObject:@"abcdefg"];

配合对象将SEL类型作为方法的形参

Car *c = [Car new];
SEL sel = @selector(run);

Person *p = [Person new];
[p makeObject:c andSel:sel];

Person中 makeObject: andSEL:的实现

- (void)makeObject:(id)obj andSel:(SEL)sel
{
    [obj performSelector:sel];
}

相关文章

  • Objective-C 碎碎念 6

    本文为大地瓜原创,欢迎知识共享,转载请注明出处。虽然你不注明出处我也没什么精力和你计较。作者微信号:christg...

  • 2020-1-9记录碎碎念

    今天我记录了一条碎碎念,这也是我第一次记录碎碎念,以后在每一次的碎碎念中我都要把它及时地给记录下来。 早上6:30...

  • 改观

    我很少写碎碎念,但喜欢看别人的碎碎念。 最近几天阅读,发现碎碎念的文章少了。 讲真,碎碎念,发泄居多,正能量少。 ...

  • 2018-10-18

    碎碎念 碎碎念 很烦碎碎念 生活的确是琐碎,可我很讨厌碎碎念。 爸爸是个很软弱的人,生活只是基本自理,并不追求...

  • 碎碎念―~6~―

    有几个小伙伴开始催我更新文章了,也有小伙伴好心建议我可以“碎碎念”一圈。哟,姑且认为,这又是对我的一种变相肯定!我...

  • 6、碎碎念

    时间很凑巧,冷不丁的给我惊喜,又悄悄地把惊喜毁掉,我想这就是人一生到老,都无法用平常心去解决掉的噩耗。 两个月了,...

  • 碎碎念6

    一电话本里的人都陌生,熟悉的人却不可以打扰。我想我真应该做些什么,要不然我会疯。 二面具戴到无法摘下,身份多到精神...

  • 碎碎念(6)

    丫头昨晚突然问我:“爸爸是不是不喜欢我俩?为什么经常甩脸色给我俩看?有时都不知为什么他又生气了?”我说:“你问问他...

  • 碎碎念6

    好想好想……二十年前,那时期盼着快快长大,再也不用起早打晚熬瞌睡!可是,时光荏苒,二十年后的我还是这状态,就想着能...

  • 碎碎念(6)

    偶尔尝试一下自己从未接触过的东西,也是一种一种不错的体验啊。比如跳舞、画画等等。

网友评论

      本文标题:Objective-C 碎碎念 6

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