20150616选择器

本文详细介绍了Objective-C编程中选择器的概念及其在运行时的使用方法,包括如何生成选择器、验证方法是否实现以及如何执行选择器保存的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
//  Dog.h
//  IOS150616_ObjectiveC_选择器
//
//  Created by qianfeng on 15/6/16.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Dog : NSObject
@property (copy)NSString *name;
@property (assign,nonatomic)NSInteger age;

- (void)bark:(NSNumber*)count andBark:(NSString *)str;
- (void)eat:(NSString *)food;
@end
//====
//  Dog.m
//  IOS150616_ObjectiveC_选择器
//
//  Created by qianfeng on 15/6/16.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import "Dog.h"

@implementation Dog

- (void)bark:(NSNumber *)count andBark:(NSString *)str
{
    int cot = [count intValue];
    for (int i=0; i<cot; i++) {
        NSLog(@"汪");
    }
    NSLog(@"%@",str);
}

- (void)eat:(NSString *)food
{
    NSLog(@"%@",food);
}
@end

//
//  main.m
//  IOS150616_ObjectiveC_选择器
//
//  Created by qianfeng on 15/6/16.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"

//**************************
//*         选择器          *
//**************************


//函数指针变量
int add(int a, int b)
{
    return a+b;
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int (*pfunc)(int,int) = add;
        NSLog(@"add = %d",pfunc(3,6));
        
        Dog *xiaoHua = [[Dog alloc] init];
        [xiaoHua eat:@"鱼"];
        
        //选择器:运行时的概念,只有在运行的时候才会判断声明的方法是否实现,编译时是无法判断的
        //1.利用@selector关键字生成选择器,SEL是一个指针类型,select是指向bark:方法的地址
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"  // 该语句可以去除调用performSelector方法时的警告
        //方法一:
        //利用方法名:
        SEL select = @selector(bark:andBark:);  //两个参数的选择器
        SEL select1 = @selector(eat:);          //一个参数的选择器
        //方法二:
        //利用方法名的字符串对象生成选择器
        //SEL select = NSSelectorFromString(@"bark:");
        
        //方法三:
        //利用C语言的字符串生成选择器
        //SEL select = sel_getUid("bark:");
        //获取选择器中保持的方法名
        NSLog(@"%s",sel_getName(select));
        NSLog(@"%@",NSStringFromSelector(select));
        NSLog(@"select = %p",select);
        //判断选择器中的方法是否实现
        //编译器只编译.h文件中声明的方法,不编译.m文件,所以要进行判断
        if ([xiaoHua respondsToSelector:select]) {
            //执行选择器中保存的方法;
            [xiaoHua performSelector:select withObject:[NSNumber numberWithInt:10] withObject:@"叫的很happy"]; //若之传入一个参数,则第二个参数使用前一个参数
        }
        if ([xiaoHua respondsToSelector:select1]) {
            [xiaoHua performSelector:select1 withObject:@"猪肉"];
        }
        
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值