美文网首页
NSObject(续)

NSObject(续)

作者: 我不白先生 | 来源:发表于2020-09-23 15:15 被阅读0次

    1.1方法选择器
    1.1.1 也是一种新的数据类型,用于唯一标识了类中的方法
    1.1.2 该数据的数据类型是SEL
    1.1.3 该数据可以通过@selector获得
    1.1.4 intancesRespondToSelector:判断一个类中是否有指定的方法
    1.1.5 respondsToSelector:判断一个对象是否能调用指定的方法
    1.1.6 performSelector:用于调用方法选择器标识的方法(很重要这个方法多态的另一种形式其中另外两个继承多态、协议多态)
    ViewController.m

    #import "ViewController.h"
    #import "TRStudent.h"
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UILabel *outputLabel;
    -(void)printSelector:(SEL)s target:(id)obj;
    @end
    @implementation ViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        TRStudent *stu = [TRStudent studentWithName:@"张三" andAge:18];
        SEL s = @selector(study);//通过@selector获得TRStudent类中study方法的方法选择器s
        //ntancesRespondToSelector:判断一个类中是否有指定的方法
        if ([TRStudent instancesRespondToSelector:s])
        {
            self.outputLabel.text = @"类TRStudent中有study方法";//判断类里有没有相应地方法
        }
        if([TRStudent instancesRespondToSelector:@selector(learn)])
        {
            self.outputLabel.text = @"类TRStudent中有learn方法";
        }
        //respondsToSelector:判断一个对象是否能调用指定的方法
        if([stu respondsToSelector:s])
        {
            self.outputLabel.text = @"对象stu能调用study方法";//对象里面有没有相应地方法
        }
        //performSelector:用于调用方法选择器标识的方法
        self.outputLabel.text = [stu performSelector:s];//等效于[stu study];
        s = @selector(rest);
         self.outputLabel.text = [stu performSelector:s];//等效于[stu rest];
        [self printSelector:s target:stu];
        [self printSelector:@selector(study) target:stu];
        NSString *str = @"";
        [self printSelector:s target:str];
        }
    -(void)printSelector:(SEL)s target:(id)obj
    {   if([obj respondsToSelector:s])
       {
        self.outputLabel.text = [obj performSelector: s];
       }
        else
        {
            self.outputLabel.text = @"对象obj无法调用方法s";
        }
    }
    

    1.2 协议选择器
    1.2.1 也是一种新的数据类型,用于唯一标识工程中的协议
    1.2.2 该数据的数据类型是Protocol*
    1.2.3 该数据可以通过@Ptotocol获得
    1.2.4 conformToProtocol:判断某个类是否采纳了指定的协议

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        Protocol *p = @protocol(NSCopying);//通过@protocol获取协议选择器p
        //conformToProtocol:判断某个类是否采纳了指定的协议
        if([TRTeacher conformsToProtocol:p])
        {
            self.outputLabel.text = @"类TRTeacher采纳了NSCopying协议";
        }
    

    相关文章

      网友评论

          本文标题:NSObject(续)

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