1. 程式人生 > >什麼時候會報unrecognized selector錯誤?

什麼時候會報unrecognized selector錯誤?

當呼叫物件的某個方法的時候, 如果在當前類中沒有找到此方法, 那麼就到當前類的父類中去尋找, 如果在父類中沒有找到, 那麼就去父類的父類中去尋找, 一直找到 NSObject 都沒有這個方法, 就會報 Unrecognized selector 的異常. 

但是在這之前, objc 的執行時會給出三次拯救程式崩潰的機會. 

第一次: 動態新增一個新方法並執行的機會

第二次: 當系統呼叫上一個方法後未能實現新增新的方法, 則系統會再來呼叫下面的這個方法, 這個方法是系統提供的一個將 SEL 轉給其他物件的機會

第三次: 當 forwardingTargetForselector 返回的 nil 或者 self 時, 會進入到這個方法, 這個方法是拯救程式的最後一步. 

這個方法用來返回一個方法簽名, 在由後面的 forwardInvocation: 去執行

相關推薦

什麼時候unrecognized selector錯誤

當呼叫物件的某個方法的時候, 如果在當前類中沒有找到此方法, 那麼就到當前類的父類中去尋找, 如果在父類中沒有找到, 那麼就去父類的父類中去尋找, 一直找到 NSObject 都沒有這個方法, 就會報 Unrecognized selector 的異常.  但是在這之

面試問題 什麼時候unrecognized selector錯誤?iOS有哪些機制來避免走到這一步?

1.物件未實現該方法。 2.物件已經被釋放。 當傳送訊息的時候,我們會根據類裡面的methodLists列表去查詢我們要動用的SEL,當查詢不到的時候,我們會一直沿著父類查詢,當最終查詢不到的時候我們會報unrecognized selector錯誤 當系統查詢不到方法

訊息轉發-什麼時候unrecognized selector的異常?

簡單來說: 當呼叫該物件上某個方法,而該物件上沒有實現這個方法的時候, 可以通過“訊息轉發”進行解決。 簡單的流程如下,在上一題中也提到過: objc是動態語言,每個方法在執行時會被動態轉為訊息傳送,即:objc_msgSend(receiver, sel

使用Masonryunrecognized selector sent to instance的錯

問題的來源:       現在我公司有兩個專案,A專案(使用xcode的版本比較舊),B專案(使用最新的xcode版本);       B專案是使用cocoaPods管理第三方庫,並加了一些第三方庫。

Java中兩個byte型別相加結果賦值給byte型別的變數編譯錯誤,byte加byte的結果為什麼是int?

背景: 之前偶然看到有討論這個問題,在網上搜了半天,結果都不盡如人意,解釋沒有到位, 有的說byte加byte預設就是int,那為什麼這麼做呢? 這不是找麻煩麼?這種奇怪的預設還有哪些?帶來一些列疑問。。。。。。 有的說byte儲存的就是整型資料,這種說法的對錯姑且不論,至少我覺得難免有

redis客戶端在本地連線CentOS 7虛擬機器的服務端時,為什麼can't connect to redis-server 的錯誤??以及做主從複製的時候總是失敗

redis客戶端在本地連線CentOS 7虛擬機器的服務端時,為什麼會報can't  connect to redis-server 的錯誤? 1.你虛擬機器上的防火牆沒有關 2.埠沒有開放 3.bi

Eclipse每次修改檔案之後,tomcat要自動重新部署,就這個錯誤:May be locked by another process

tomcat啟動後,每次修改檔案後,tomcat會自動重新部署,就會報如下錯誤: Publishing failed with multiple errors Could not delete D:\

mac go build 或 go run 下面錯誤 ld: warning: text-based stub file

ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/

使用springmvc 接收上傳圖片,在 手機 ios 上,有圖片上傳就不錯, 沒有就下面這個錯誤,然後在pc端跟安卓手機上就不有這個錯誤,這是為什麼呢?

七月 18, 2018 4:04:22 下午 org.apache.catalina.core.StandardWrapperValve invoke 嚴重: Servlet.service() for servlet [springMVC] in context with

Linux下tomcat部署的專案,應用下載到專案中的檔案,無法下載,404找不到檔案的錯誤

將專案部署到linux系統中的tomcat下,上下文路徑為demo,結構如下: |--tomcat-webapps-demo ....|--js ....|--WEB-INF ....|--META-INF ....|--html ....|--export .......

null值插入數據庫

point all color harmony 錯誤 ring amr red epo 2017-05-03 23:25:01,568 [com.creditharmony.adapter.dao.base.ParamRecordDao.insertException]-[

pdm打開工作空間打印錯誤

aic rtt urg jmx cbe cls r+ ued ocl   最近每次使用pdm的時候總是會提示打印錯誤,不勝其煩.   了解了下,是由於print spooler被關閉導致.通常是360開機優化一類關閉的,打開服務,找到print spooler服務 啟動

【mysql】service mysql start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤

開機 init.d starting 設置 tin 執行 rest root lan service MySQL start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤的方法如下: [[email protected]/

oracle數據庫ORA-01033錯誤

數據庫服務 oracle system Oracle登錄 ORA-01033: ORACLE正在初始化或關閉的解決辦法2015-03-16 01:20 | 160511人閱讀 | 來源Oracle登錄 ORA-01033: ORACLE正在初始化或關閉的解決方法 Oracle存在多實例 相應的在D

連接MySql的時候1130的錯誤解決辦法

upd 服務器 操作 detail 知識庫 conn cmd命令 p地址 update 部署了一個 數據庫采用Mysql的程序,sqlyog連接非本地的Mysql服務器的數據庫,居然無法連接很奇怪,報1130錯誤,ERROR 1130: Host 192.168.3.100

Keil RTX使用 os_mut_init Hard Fault 錯誤解決記錄

mod ptime 之前 sta pda style tasks main print 首先確定你的軟件是在互斥信號初始化的位置,在以下幾個位置,將會報Hard Fault 錯誤: (1).os_sys_init_user 用戶線程創建之前 (2).os_tsk_cre

C#數據沒初始化,使用錯,可以初始化null

rgs send protect null new 報錯 tar sender ted protected void Page_Load(object sender, EventArgs e) {   string[] A;      if (B== 0)

scala中計算的的一個小問題,超出Int.maxValue時不

class sca cal div 問題 pri 如果 int sin 如果小於Int.max時他不會報錯 def sumcount(str:String): Int ={ val ints = for(c <- str)yield { p

nexus啟動錯----->錯誤 1067: 進程意外終止。

之前 jdk blank tle lib 然而 r.java .exe con 1、今天啟動nexus報錯; 2、錯誤信息 錯誤 1067: 進程意外終止。 3、檢查發現我之前把jdk升級了。然而nexus之前指定的jdk將不再生效。 4、解決辦法 找到nexus

Oracle11g啟動Server服務錯:錯誤1053:服務沒有及時響應或控制請求

今天 oracle11 alt .com 控制 啟動 oracl 電腦 變量 今日在啟動Oracle11g的服務時,突然莫名報錯,昨日尚一切正常,靜心細思:系統未升級;未安裝其他程序;未更改系統相關配置包括環境變量。 錯誤原因如下圖所示: 經過一番折騰,唯一發現今天特殊點