你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS SEL的簡單總結

iOS SEL的簡單總結

編輯:關於IOS

復制代碼

@interface Person : NSObject + (void)test1; - (void)test2; @end     // 根據.h文件中定義的Person類和方法 執行完這行代碼 在內存中如下     Person *person = [[Person alloc] init]; 復制代碼         SEL就是對方法的一種包裝。包裝的SEL類型數據它對應相應的方法地址,找到方法地址就可以調用方法   1.方法的存儲位置   在內存中每個類的方法都存儲在類對象中 每個方法都有一個與之對應的SEL類型的數據 根據一個SEL數據就可以找到對應的方法地址,進而調用方法 SEL類型的定義:  typedef struct objc_selector *SEL 2.SEL對象的創建       SEL s1 = @selector(test1);   // 將test1方法轉換為NSString對象        SEL s2 = NSSelectorFromString(@"test1");   // 將一個字符串方法轉換成為SEL對象   3.SEL對象的其他用法   // 將SEL對象轉換為NSString對象   NSString *str = NSStringFromSelector(@selector(test));  Person *p = [Person new];   // 調用對象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(@"無參數的對象方法"); }   - (void)test2:(NSString *)str {     NSLog(@"帶有參數的方法%@",str); } @end   /******************************* main.m文件 **********************************/   #import "Person.h" #import <Foundation/Foundation.h>   /*  調用方法有兩種方式:  1.直接通過方法名來調用  2.間接的通過SEL數據來調用  */   int main(int argc, const char * argv[]) {     Person *person = [[Person alloc] init];          // 1.執行這行代碼的時候會把test2包裝成SEL類型的數據     // 2.然後根據SEL數據找到對應的方法地址(比較耗性能但系統會有緩存)     // 3.在根據方法地址調用對應的方法          [person test1];          // 將方法直接包裝成SEL數據類型來調用 withObject:傳入的參數     [person performSelector:@selector(test1)];     [person performSelector:@selector(test2:) withObject:@"傳入參數"];          return 0; } 復制代碼
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved