1. 程式人生 > >iOS開發筆記--Objective-C中根據函式名呼叫函式

iOS開發筆記--Objective-C中根據函式名呼叫函式

Objective-C中呼叫函式的方法是“訊息傳遞”,這個和普通的函式呼叫的區別是,你可以隨時對一個物件傳遞任何訊息,而不需要在編譯的時候宣告這些方法。所以Objective-C可以在runtime的時候傳遞訊息。

主要用到:SEL和@selector,當然還有performSelector

看例子:

先是三個函式:

  1. -(void)CallBack0  
  2. {  
  3.     NSLog(@"CallBack0");  
  4. }  
  5. -(void)CallBack1:(int)a  
  6. {  
  7.     NSLog(@"CallBack1:a=%i",a);  
  8. }  
  9. -(void)CallBack2:(
    int)a b:(int)b  
  10. {  
  11.     NSLog(@"CallBack2:a=%i,b=%i",a,b);  
  12. }  

performSelector呼叫:
  1. [self performSelector:@selector(CallBack0)];  
  2. [self performSelector:@selector(CallBack1:) withObject:1];  
  3. [self performSelector:@selector(CallBack2:b:) withObject:1 withObject:2];  
根據函式名動態呼叫:
  1. NSString *[email protected]
    "CallBack0";  
  2. SEL faSelector=NSSelectorFromString(a);  
  3. [self performSelector:faSelector];  
  4. NSString *[email protected]"CallBack1:";  
  5. SEL fbSelector=NSSelectorFromString(b);  
  6. [self performSelector:fbSelector withObject:1];  
  7. NSString *[email protected]"CallBack2:b:";  
  8. SEL fcSelector=NSSelectorFromString(c);  
  9. [self performSelector:fcSelector withObject:1 withObject:2];  

這樣就可以根據函式名呼叫函式啦!

相關推薦

iOS開發筆記--Objective-C根據函式呼叫函式

Objective-C中呼叫函式的方法是“訊息傳遞”,這個和普通的函式呼叫的區別是,你可以隨時對一個物件傳遞任何訊息,而不需要在編譯的時候宣告這些方法。所以Objective-C可以在runtime的時候傳遞訊息。 主要用到:SEL和@selector,當然還有perf

iOS開發筆記--Objective-C實現多繼承

我們都知道objective C不能像C++一樣支援多繼承,但是在OC的使用經常會碰到需要使用多繼承的情況。例如,ClassA中有methodA,ClassB中methodB,而現在需要使用這兩個類中的方法。如何按照C++的程式設計思路,毫無疑問採用多繼承就搞定

iOS開發筆記--OC工程調用不了Swift程式碼

今天在OC工程裡面直接引入了一個第三方的Swift包,結果OC檔案裡面死活找不到Swift物件。開啟 “工程名-swift.h”檔案內容似乎是空的。(正常的檔案應該會有很多OC方法,物件) 後來發現工程裡面並沒有”工程名-Bridging-Header.h

iOS開發Objective-c的MD5/SHA1加密演算法的實現

Objective-c實現MD5和SHA1演算法相對還是比較簡單的,可以直接呼叫系統的C/C++共享庫來實現呼叫 MD5即Message Digest Algorithm 5(資訊-摘要演算法 5),用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一 SHA即Se

c/c++使用字串動態呼叫函式

在專案的開發過程中,需要使用到類似Java的反射機制,根據提供的字串,動態的呼叫指定的函式。 Java反射機制:this.getClass().getMethod("test_"+interfaceName,null).invoke(this,null); 如:傳入main

IOS開發筆記12-Object-C的物件與記憶體

前言 Object-C的記憶體管理機制與java那種全自動的垃圾回收機制是不同的,它本質上還是c語言的手動管理方式,只不過稍微加了一些自動方法。 指標和指標的值 以下程式宣告一個指向NSDate例項的變數: #import <Found

iOS --- Objective-C類的成員變數與屬性

在Objective-C的類與物件的概念中. 成員變數與屬性的區別與聯絡一直沒有搞清楚. 直到學習了慕課網上的這個課程Objective-C面向物件初體驗, 才算真正有了點感覺了. 最關鍵的結論就是: 類內使用成員變數{}, 類外使用屬性@property.

iOS---Objective-C@class與#import的區別

在Objective-C的專案中, @class通常放在.h檔案中, 主要作用在於提升編譯效能, 且能防止標頭檔案的遞迴import. 編譯效能的考慮 通常, 使用#import引入一個類的標頭檔案, 編譯時會將該類的標頭檔案中的所有資訊都引入, 包含屬

IOS基礎:深入理解Objective-c@class的含義

objective-c中,當一個類使用到另一個類時,並且在類的標頭檔案中需要建立被引用的指標時, 如下面程式碼:  A.h檔案 #import "B.h"   @interface A : NSObject {        B *b;    }    @end

iOS開發筆記-根據銀行卡號判斷銀行名稱

方便大家使用已更新為plist檔案,git地址:根據銀行卡號判斷銀行名稱 雞肋的後臺返回銀行卡號卻沒有返回名稱,問他是不是忘了新增,他說你自己網上找找。。。。。。尼瑪,很無奈的在網上扒拉了半天知道了java的,萬幸博主還學過Java,四年的大學也不是白上了,還好程式碼還不

ios開發-Object-C可變引數函式

簡介 一個可變引數函式是指一個函式擁有不定的引數,即為一個函式可接收多個引數。有時我們會遇到一些算術問題需要用到,比如是計算傳入引數的總和,字串的連線或是其它操作過程,我們在 OC 裡也經常使用,最經典的就是 NSLog( C 為 printf ) ,它可以指定格式的輸出,格式化輸出的內容。 現在我們

iOS開發筆記之四十三——日曆NSCaledar使用過程遇到的一個蘋果系統bug

    我們的app上有一個時間日曆,早期的需求只考慮到app在國內使用。在國內時,NSCaledar這個方法的使用一切正常,後來業務要擴大到國外各地。NSCaledar就暴露了一個問題,這個問題直接導致了我們日曆頁面的卡死。我們忽略掉所有的繁文縟節,直接進入問題的根源。

iOS開發筆記根據圖片URL獲取圖片尺寸

載入網路圖片時,根據Url獲取圖片的尺寸進行UI佈局。可將方法+ (CGSize)getImageSizeWithURL:(id)URL;放在UIImage的分類中。引入系統的ImageIO.framework/** * 根據圖片url獲取圖片尺寸 */ + (CGSi

iOS 關於Objective-CUIScrollView的使用總結

前言:由於之前很早寫的關於【iOS 關於UIScrollView的幾點總結】,是從自己的markdown筆記直接拷貝過來後也沒有整理,所以在閱讀上顯得有點亂, 今天花時間重新整理排版了下,方便閱讀。還請見諒這麼久才重新整理。 1、什麼是 UI

iOS沉思錄】深思Objective-C的property屬性

OC中的屬性 屬性(Property)是Objective-C語言的其中一個特性,它把類物件中的資料變數及其讀寫方法統一封裝起來,是對傳統C++中要重複為每個變數定義讀寫方法的一種封裝優化,OC將這些變數封裝為屬性變數,系統可自動生成getter和se

Objective-C 的Runtime的詳細使用

enc ring 博客 document 每次 tps htm lec guid Runtime全面了解 一直以來,OC被大家冠以動態語言的稱謂,其實是因為OC中包含的runtime機制。Runtime 又叫運行時,是一套底層的 C 語言 API,其為 iO

objective-c 數據類型之四 字典(NSDictionary)

bject ted ray 初始化 -c lec com lock led // 1. 字典初始化、賦值方式1 NSMutableDictionary *m_dictionary = [[NSMutableDictionary alloc] initWithCa

objective-c 數據類型之二 字符串(NSString)

option 大小 edas 字符串長度 seq scan 後者 code form // 1. 聲明一個NSString對象,註意對象前要加‘*’。 NSString *string1; // 賦值方

iOS開發的Quartz2D使用實現圖片剪切和截屏功能

ogr boa selector cgrect 如果 搭建 shu 分享 ins 原文 http://www.jb51.net/article/75671.htm 圖片剪切一、使用Quartz2D完成圖片剪切1.把圖片顯示在自定義的view中先把圖片繪制到v

[學習筆記Objective-C]《Objective-C-基礎教程 第2版》第十一章 屬性

變量名 erl .text nonatomic syn split view 不能 -name 11.1 使用屬性值 @property float rainHandling; //表明此類具有float類型的屬性,其名稱為rainHandling