国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

iOSSEL的簡單總結(jié)

2019-11-14 20:38:05
字體:
供稿:網(wǎng)友
@interface Person : NSObject
+ (void)test1;- (void)test2;@end
    // 根據(jù).h文件中定義的Person類和方法 執(zhí)行完這行代碼 在內(nèi)存中如下    Person *person = [[Person alloc] init];

 

SEL就是對方法的一種包裝。包裝的SEL類型數(shù)據(jù)它對應(yīng)相應(yīng)的方法地址,找到方法地址就可以調(diào)用方法

1.方法的存儲位置

  • 在內(nèi)存中每個類的方法都存儲在類對象中
  • 每個方法都有一個與之對應(yīng)的SEL類型的數(shù)據(jù)
  • 根據(jù)一個SEL數(shù)據(jù)就可以找到對應(yīng)的方法地址,進(jìn)而調(diào)用方法
  • SEL類型的定義:  typedef struct objc_selector *SEL

2.SEL對象的創(chuàng)建

    SEL s1 = @selector(test1);   // 將test1方法包裝成SEL對象 

    SEL s2 = NSSelectorFromString(@"test1");   // 將一個字符串方法轉(zhuǎn)換成為SEL對象

3.SEL對象的其他用法

// 將SEL對象轉(zhuǎn)換為NSString對象  
NSString *str = NSStringFromSelector(@selector(test));

 Person *p = [Person new];

// 調(diào)用對象p的test方法
[p performSelector:@selector(test)];

/******************************* Person.h文件 **********************************/#import <Foundation/Foundation.h>@interface Person : NSObject- (void)test1;- (void)test2:(NSString *)str;@end/******************************* Person.m文件 **********************************/#import "Person.h"@implementation Person- (void)test1{    NSLog(@"無參數(shù)的對象方法");}- (void)test2:(NSString *)str{    NSLog(@"帶有參數(shù)的方法%@",str);}@end/******************************* main.m文件 **********************************/#import "Person.h"#import <Foundation/Foundation.h>/* 調(diào)用方法有兩種方式: 1.直接通過方法名來調(diào)用 2.間接的通過SEL數(shù)據(jù)來調(diào)用 */int main(int argc, const char * argv[]){    Person *person = [[Person alloc] init];        // 1.執(zhí)行這行代碼的時候會把test2包裝成SEL類型的數(shù)據(jù)    // 2.然后根據(jù)SEL數(shù)據(jù)找到對應(yīng)的方法地址(比較耗性能但系統(tǒng)會有緩存)    // 3.在根據(jù)方法地址調(diào)用對應(yīng)的方法        [person test1];        // 將方法直接包裝成SEL數(shù)據(jù)類型來調(diào)用 withObject:傳入的參數(shù)    [person performSelector:@selector(test1)];    [person performSelector:@selector(test2:) withObject:@"傳入?yún)?shù)"];        return 0;}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 都江堰市| 崇文区| 瓦房店市| 漾濞| 读书| 沁阳市| 临汾市| 西峡县| 六盘水市| 即墨市| 凤台县| 吉隆县| 阿克| 武宁县| 同江市| 博野县| 奇台县| 濮阳县| 舞阳县| 广饶县| 鄂托克前旗| 桓台县| 鲜城| 江安县| 鄂伦春自治旗| 宁强县| 锡林郭勒盟| 德令哈市| 荆门市| 靖远县| 衡阳县| 长治县| 莱西市| 松原市| 同德县| 攀枝花市| 靖宇县| 清丰县| 安岳县| 安塞县| 汪清县|