zoukankan      html  css  js  c++  java
  • IOS基础之 (十五)知识点

    一 SEL

    1. 方法的存储位置

    每个类的方法地址列表都存储在类对象中。

    每个方法都有一个与之对应的SEL类型的对象。

    根据一个SEL对象就可以找到方法的地址,进而调用方法。

    Person.h

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Person : NSObject
     4 
     5 + (void) test1;
     6 
     7 - (void) test2;
     8 
     9 - (void )test3:(NSString *) abc;
    10 
    11 @end

    Person.m

     1 #import "Person.h"
     2 
     3 @implementation Person
     4 
     5 + (void)test1{
     6     NSLog(@"调用方法test1 ---
    ");
     7 }
     8 
     9 - (void)test2{
    10     NSLog(@"调用方法test2 ---
    ");
    11 }
    12 
    13 - (void)test3:(NSString *)param1{
    14     NSLog(@"调用方法test3 ---%@", param1);
    15 }
    16 
    17 @end

    main.m

    1 [p test2];
    2     
    3 [p performSelector:@selector(test2)];
    

    第1行 第一种方式:直接通过p对象调用test2方法。

    第2行 第二种方式:间接调用 test2方法。

    1)把test2包装成SEL类型的数据。

    2)根据SEL数据找到对应的方法地址。

    3)根据方法地址调用对应的方法。

    1 [p test3:@"123"];
    2 
    3 [p performSelector:@selector(test3:) withObject:@"123"];
    4 
    

    第1行:p 类直接调用带参数的方法test3.

    第3行: p类间接调用带参数的方法 test3,注意间接调用带参数的方法时,使用 @selector(方法:)的形式调用。

    1 NSString *name = @"test2";
    2 SEL s2 = NSSelectorFromString(name);
    3 NSLog(@"%p" , s);
    4 NSLog(@"%p" , s2);

     

  • 相关阅读:
    LeetCode 368Largest Divisible Subset
    macbook 源码安装 redis6.2.6
    macbook 源码安装 nginx1.20.1
    MySQL总结
    DataWork之 MaxComputer的使用
    Spring的IOC源码分析
    Spring Bean的生命周期
    SpringMVC工作原理
    Spring全家桶(二)之SpringMVC总结
    (已经成功部署)配置vue+nginx+uwsgi luffy项目
  • 原文地址:https://www.cnblogs.com/wangshuo1/p/5423370.html
Copyright © 2011-2022 走看看