Snail—OC学习之选择器SEL

选择器:是一种变量的类型,用于存储方法,类似于C语言的函数指针

作用:用于UI控件的点击事件

新建一个Dog的类

在Dog.m中写两个方法

<span style="font-size:14px;">#import "Dog.h"

@implementation Dog

- (void)bark{

    NSLog(@"狗在叫");

}
- (void)barkToPeople:(NSString *)name{
    NSLog(@"狗向%@叫",name);
}

@end
</span>

然后引入Dog的头文件 在main.m中进行调用

<span style="font-size:14px;">#import <Foundation/Foundation.h>
#import "Dog.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        Dog * daodao = [[Dog alloc] init];
        //狗叫的方法
        [daodao bark];
        //狗像某人叫得方法
        [daodao barkToPeople:@"Snail"];

        //定义一个选择器
        SEL sel = @selector(bark);
        //判断daodao是否有bark的方法
        if ([daodao respondsToSelector:sel]) {
            [daodao performSelector:sel];
        }

        //有参数的选择器
        SEL sel2 = @selector(barkToPeople:);
        if ([daodao respondsToSelector:sel2]) {
            //给狗像某人叫得方法 加一个参数
            [daodao performSelector:sel2 withObject:@"Snail"];
        }

        //选择器最多只能加两个参数 所以有一定的局限性

        /*
         营造一种运行情况
         在控制台输入一个函数的名字
         然后转换为OC的字符串对象
         然后判断daodao是否有这个方法 然后再执行一系列操作
         */
        char c[20] = {};
        scanf("%s",c);

        NSString * inputStr = [[NSString alloc] initWithUTF8String:c];
        //根据一个字符串生成一个选择器
        SEL sel3 = NSSelectorFromString(inputStr);
        if ([daodao respondsToSelector:sel3]) {
            [daodao performSelector:sel3];
        }else{
            NSLog(@"刀刀没有%@方法",inputStr);
        }

    }
    return 0;
}
</span>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-31 09:03:10

Snail—OC学习之选择器SEL的相关文章

Snail—OC学习之文件操作(非读写)

#import <Foundation/Foundation.h> //宏定义一个文件夹的路径信息 #define path @"/Users/XXX/Desktop/Snail" //宏定义一个文件的路径 #define filePath @"/Users/XXX/Desktop/Snail/Snail3/Snail.txt" int main(int argc, const char * argv[]) { @autoreleasepool { //

Snail—OC学习之数组NSArray

NSArray是OC中的数组,是用来存储对象的.可以是重复的.有序的 新建一个Dog的类,在main.m中引入Dog的头文件 #import <Foundation/Foundation.h> #import "Dog.h" int main(int argc, const char * argv[]) { @autoreleasepool { Dog * dog = [[Dog alloc] init]; //数组的创建方式 //空数组创建 NSArray * arrry

Snail—OC学习之继承

继承在字面意思就是继承财产等等.就是儿子继承父亲的财产也好.各种东西.当然儿子也可以有父亲没有的其他东西.父亲也可以不让儿子继承一些东西 上面是说的现实生活中得例子. 所谓继承,是指一个对象直接使用另一对象的属性和方法.面向对象的变成语言都有继承 OC所有的官方类或者自定义类的直接父类及间接父类都是NSObjetc类 版权声明:本文为博主原创文章,未经博主允许不得转载.

Snail—OC学习之类及对象

对象是对客观事物的抽象,类是对对象的抽象.类是一种抽象的数据类型 面向对象的编程语言都是有类及对象的 类是由属性及方法组成. OC中的所有官方类及自定义的类都是NSObject的直接或者间接子类 下面看看类的编写规范 首先,COMMAND+N 新建一个类 Dog类 看到会生成两个文件.h和.m .h是对属性及方法的声明,.m是对方法实现. Dog.h文件中编写如下 #import <Foundation/Foundation.h> @interface Dog : NSObject{ //名字

Snail—OC学习之类别Category

类别就是向类添加一些有用的功能或者方法 利于开发 类可以是系统类.可以是自定义类 类别跟子类是不一样的,类别只能添加一些方法 属性变量什么的不可以添加 不创建新类,即可对已有类进行扩展 做项目的时候 跟其他程序员会更好的合作 新建类别的图放在最后面 我们为系统类NSArray添加一个打印方法 使得能输出中文 界面如下 然后再NSArray+MyNSLog.h中声明一个函数 #import <Foundation/Foundation.h> @interface NSArray (MyNSLog

Snail—OC学习之NSNumber

在以后的学习或者以后做项目的时候 会希望把基本数据类型,例如:int.float等等数值 也存到数组或者字典中 因为数组.字典只能存储对象 所以,NSNumber类可以对基本数据进行封装成一个对象 进行存储 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber * intNumber = [NSNumber numberWithInt:11]

Snail—OC学习之本地数据持久化(plist)

plist文件的格式 plist是一种数据持久化的文件 1.最外层通常为数组或者字典 2.plist里面的数据 只局限于数组.字典.逻辑值(BOOL).NSNumber.NSData.NSDate.字符串等数据类型 3.无法存储自定义类型的对象 plist作用 1.不适用它作为缓存 无法存储自定义类型的对象 2.通常存储长时间不容易发生变化的数据.国家.省市区.汽车品牌.项目的info.plist工程的设置信息 3.占用内存小 #import <Foundation/Foundation.h>

Snail—OC学习之本地数据持久化(归档)

#import <Foundation/Foundation.h> #import "Dog.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSString * filePath = @"/Users/student/Desktop/snail/array.data"; //对官方类创建的对象进行存储 NSArray * array = @[@"one"

Snail—OC学习之可变数组NSMutableArray

可变数组NSMutableArray 继承于 NSArray  NSArray的所有方法都适用于可变数组 下面是可变数组的一些初始化方法 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //可变数组继承于不可变数组 //空的可变数组 NSMutableArray * array = [[NSMutableArray alloc] init]; //传入0