SEL

Object-C 中的Selector 概念

Andrew Huang?<bluedrum@163.com> 轉載請注明作者和聯絡方式

在iphone程序中會大量看到@selector這樣的用法。<<iphone開發基礎>花了很大一個篇幅來解析這個語法,但是不知 是翻譯問題,還是解釋過細,不大看得懂,很是不給力.直到程序用這個語法,并且仔細看了一些解析文章。才明白這一語法。
簡而言之,你可以理解 @selector()就是取類方法的編號,他的行為基本可以等同C語言的中函數指針,只不過C語言中,可以把函數名直接賦給一個函數指針,而Object-C的類不能直接應用函數指針,這樣只能做一個@selector語法來取.
它的結果是一個SEL類型。這個類型本質是類方法的編號(函數地址)?因此我們有如下代碼。
一.取得selector值.
C函數指針
?int add(int val)
?? ?{
?? ? ?return val+1;
?? ?}

?? ?int (* c_func)(int val); //定義一個函數指針變量
?? c_func = add ;? ?//把函數addr地址直接賦給c_func
object-c的選擇器,
?@interface foo
?? -(int)add:int val;
?? @end

?? SEL class_func ; //定義一個類方法指針
?? class_func = @selector(add:int) ;
注意1. @selector是查找當前類的方法,而[object @selector(方法名:方法參數..) ] ;是取object對應類的相慶方法.
注意2.查找類方法時,除了方法名,方法參數也查詢條件之一.
注意3. 可以用字符串來找方法?SEL 變量名 = NSSelectorFromString(方法名字的字符串);
注意4. 可以運行中用SEL變量反向查出方法名字字符串
NSString *變量名 = NSStringFromSelector(SEL參數);
二.執行selector值.
?? 取得相慶值后,怎么處理SEL值呢,這一點仍然與函數指針一樣,就是執行它
?? 函數指針執行,(以下有幾種等效形式)
?? ? *c_func(10);
?? ? c_func(10);


??SEL變量的執行.用performSelecor方法來執行.
?? ? [對象 performSelector:SEL變量 withObject:參數1 withObject:參數2];

三.selector的應用場合
selector本質是跟C的回調函數一樣。主要用于兩個對象之間進行松耦合的通訊.這種方法很多開發環境用到。比如GTK,Delphi.基本上整個Cocoa庫之間對象,控制之間通訊都是在這個基礎構建的。
轉:http://chinaxxren.iteye.com/blog/1156909
  • -(BOOL) isKindOfClass: classObj 用來判斷是否是某個類或其子類的實例
  • -(BOOL) isMemberOfClass: classObj 用來判斷是否是某個類的實例
  • -(BOOL) respondsToSelector: selector 用來判斷是否有以某個名字命名的方法(被封裝在一個selector的對象里傳遞)
  • +(BOOL) instancesRespondToSelector: selector 用來判斷實例是否有以某個名字命名的方法. 和上面一個不同之處在于, 前面這個方法可以用在實例和類上,而此方法只能用在類上.
  • -(id) performSelector: selector 執行某個方法

轉載于:https://www.cnblogs.com/GnagWang/archive/2011/12/05/2276559.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377919.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Calendar add()方法與示例

日歷類的add()方法 (Calendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to perform add or subtract the given amount of time to the given cal_fi (calendar field). add()方法用于對指定…

三、線性回歸實驗分析

所有代碼塊都是在Jupyter Notebook下進行調試運行&#xff0c;前后之間都相互關聯。 文中所有代碼塊所涉及到的函數里面的詳細參數均可通過scikit-learn官網API文檔進行查閱&#xff0c;這里我只寫下每行代碼所實現的功能&#xff0c;參數的調整讀者可以多進行試驗調試。多動手…

leetcode 236. 二叉樹的最近公共祖先 思考分析

目錄題目思考分析改進本文章代碼思路來源于公眾號【代碼隨想錄】題目 給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個結點 p、q&#xff0c;最近公共祖先表示為一個結點 x&#xff0c;滿足 x 是 p、…

輕輕松松給PCB板添加LOGO

在 PCB 圖中放置漢字或圖形的方法&#xff1a;A、文字——> 圖片——> PCB 圖——> 復制到自己作品中B、圖片——> PCB 圖——> 復制到自己作品中1、首先準備好“BMP”格式的圖片&#xff0c;在圖片中依靠顏色分辨圖層&#xff0c;所以最好準備“單色黑白”圖。…

java bitset_Java BitSet clone()方法及示例

java bitsetBitSet類clone()方法 (BitSet Class clone() method) clone() method is available in java.util package. clone()方法在java.util包中可用。 clone() method is used to clone this Bitset or in other words, this method is used to create a Bitset that is si…

小技巧

//屏蔽下拉框的某一個選項 <disabled"disable">... 1 <html>2 <body>3 4 <select>5 <option>Volvo</option>6 <option>Saab</option>7 <option disabled"disabled">Mercedes</option>…

jquery中text val html attr的差別

html和innerHTMl是一樣的&#xff0c;可以獲得和設置html標簽文本如&#xff1a;設置值&#xff1a;$("p").html("<span stylefont-size:13px;color:red>HTML標簽文本</span>"); 獲得值&#xff1a;$("p").html(); text和innerText是…

leetcode 235. 二叉搜索樹的最近公共祖先 思考分析

目錄題目思考迭代法題目 給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個結點 p、q&#xff0c;最近公共祖先表示為一個結點 x&#xff0c;滿足 x 是 p、q 的祖先且 x 的深度盡可能大&#xff0…

四、邏輯回歸

邏輯回歸logistic_regression(LR)其實是分類算法&#xff0c;而不是回歸算法。 回歸算法得到的是一個數&#xff0c;分類算法得到的是幾個不同的類別。 邏輯回歸就是通過函數將值轉換為0-1之間&#xff0c;形成概率問題&#xff0c;從而實現了不同類別的分類。 Sigmoid 函數 …

db,dbms,dba_DBMS中的數據庫管理員(DBA)

db,dbms,dba數據庫管理員(DBA) (Database Administrator (DBA)) To use the Database Management System, it is necessary to have central control over data and programs together in order to access such data. A person who has central control over such system is re…

運算符優先級

轉載于:https://www.cnblogs.com/c-cloud/p/3280911.html

五、邏輯回歸實驗分析

所有代碼塊都是在Jupyter Notebook下進行調試運行&#xff0c;前后之間都相互關聯。 文中所有代碼塊所涉及到的函數里面的詳細參數均可通過scikit-learn官網API文檔進行查閱&#xff0c;這里我只寫下每行代碼所實現的功能&#xff0c;參數的調整讀者可以多進行試驗調試。多動手…

二叉搜索樹的插入、刪除、修剪、構造操作(leetcode701、450、669、108)

目錄1、leetcode 701. 二叉搜索樹中的插入操作1、題目2、遞歸法3、迭代法2、leetcode 450. 二叉搜索樹中的插入操作1、題目2、思路遞歸法3、迭代法4、刪除結點的兩個方法以及注意點3、leetcode 669. 修剪二叉搜索樹1、題目2、思考與遞歸3、迭代法4、leetcode 108. 將有序數組轉…

Memcached查看和清理

1.一種telnet localhost 11211 #登陸stats #查看狀態flush_all #清理quit #退出2.又學到一個:echo flush_all | nc localhost 112113.1、數據存儲(假設key為test,value為12345) printf "set test 0 1 5\r\n12345\r\n" | nc localhost 11211STORED2.數據取回(假設key為…

模擬退火算法解決np_P和NP問題與解決方案| 演算法

模擬退火算法解決npP問題 (P Problems) P is the set of all the decision problems solvable by deterministic algorithms in polynomial time. P是多項式時間內確定性算法可解決的所有決策問題的集合。 NP問題 (NP Problems) NP is the set of all the decision problems t…

POJ2251Dungeon Master

http://poj.org/problem?id2251 題意 &#xff1a; 就是迷宮升級版&#xff0c;從以前的一個矩陣也就是一層&#xff0c;變為現在的L層&#xff0c;" . "是可以走&#xff0c;但是“#”不可以走&#xff0c;從S走到E&#xff0c;求最短的路徑&#xff0c;若是找不到…

六、聚類算法

一、聚類概念 1&#xff0c;通俗易懂而言&#xff0c;聚類主要運用于無監督學習中&#xff0c;也就是將沒有標簽的東西如何分為幾堆兒。 2&#xff0c;無監督學習即沒有標簽&#xff0c;不知道這些玩意到底是啥。當然&#xff0c;有監督學習就是由標簽&#xff0c;我們是提前知…

Apache服務器通過.htaccess文件設置防盜鏈

用戶經常面對的一個問題就是服務器的流量問題&#xff0c;而站點文件被盜鏈是其中最為主要的部分。所謂盜鏈&#xff0c;是指其他網站直接鏈接我們網站上的文件&#xff0c;一般來 說&#xff0c;盜鏈的對象大多為很耗帶寬的大體積文件&#xff0c;如圖片、視頻等。這樣造成的后…

【C++grammar】string類和array類

目錄1、C11的string類1、創建 string 對象2、追加字符串append函數3、為字符串賦值assign函數4、at, clear, erase, and empty函數5、比較字符串compare()6、獲取子串at() 、substr()函數7、搜索字符串find()8、插入和替換字符串insert() 、replace()9、字符串運算符10、string…

六、聚類算法實戰

所有代碼塊都是在Jupyter Notebook下進行調試運行&#xff0c;前后之間都相互關聯。 文中所有代碼塊所涉及到的函數里面的詳細參數均可通過scikit-learn官網API文檔進行查閱&#xff0c;這里我只寫下每行代碼所實現的功能&#xff0c;參數的調整讀者可以多進行試驗調試。多動手…