首页
/
每日頭條
/
圖文
/
ios怎麼設置多個協議
ios怎麼設置多個協議
更新时间:2025-07-12 13:31:09

首先,協議(protocol)不是對象,是Objective-C的一種語法,用于聲明一組方法,約定調用者可以使用實現者的哪些方法。

協議不能被單獨實例化,隻能由類來明文聲明,并具體實現。

用Xcode8添加協議

基本步驟與iOS開發基礎:如何使用類别(Category) 相似,隻是文件類型選擇協議:

ios怎麼設置多個協議(iOS開發基礎協議代理)1

協議聲明:

ios怎麼設置多個協議(iOS開發基礎協議代理)2

@optional表示實現者可自由選擇是否實現;

@required表示必須實現。

聲明繼承協議:

ios怎麼設置多個協議(iOS開發基礎協議代理)3

協議不但可以繼承的,并且可以多繼承,在尖括号中用逗号分隔:

ios怎麼設置多個協議(iOS開發基礎協議代理)4

這裡NSObject是個協議名,并不是類名。如果實現者聲明XSProtocol,則需要同時實現NSObject, NSCopying兩套協議。

協議的實現:

如我們常用的UITableView的數據源和代理,可以用同一個類來實現:

ios怎麼設置多個協議(iOS開發基礎協議代理)5

@implementation部分,實現協議聲明的方法:

ios怎麼設置多個協議(iOS開發基礎協議代理)6

編譯器會告訴你哪些必要的(聲明為@required的)協議方法沒有實現:

ios怎麼設置多個協議(iOS開發基礎協議代理)7

協議的使用:

1. 指定對象需要實現的方法:

ios怎麼設置多個協議(iOS開發基礎協議代理)8

一看這樣的聲明,就知道該方法需要一個會編程的學生,

如果傳入一個普通的Student對象,會引發一個警告:

ios怎麼設置多個協議(iOS開發基礎協議代理)9

所以協議可以幫助我們寫出自我說明的代碼,并且編譯器會幫助我們檢查。

2. 調用時,先判斷被調用者是否實現某方法:

ios怎麼設置多個協議(iOS開發基礎協議代理)10

可能有些童鞋會想,每次調用方法前(即使不是協議方法)都調用一次respondsToSelector,不就萬無一失了嗎?很不幸,respondsToSelector會消耗較多的資源,降低程序的執行效率,因此建議新手在調用協議方法時必須進行檢查,等經驗積累後,再根據具體需要自行選擇是否檢查,比如需要提高性能時,可以緩存respondsToSelector的判斷結果。

什麼是代理?

代理(delegate)是A對象指定B對象處理某些特定任務的設計模式,這裡B對象就成為了A對象的“代理”。

ios怎麼設置多個協議(iOS開發基礎協議代理)11

在Objective-C中,協議是實現代理模式的一種方式,

協議提供了面向接口編程的一種方式,使用協議,調用者隻需關心被調用者是否能做某事,而不關心被調用者具體是誰。

這就是為什麼代理對象總是被聲明成id,也就是說,隻要實現了協議,任何類都可以成為代理。

理解了代理模式,這裡需要提醒使用協議的一個注意點:

聲明為代理的屬性,需要定義為 weak

ios怎麼設置多個協議(iOS開發基礎協議代理)12

因為B将自己聲明為A的代理,必然也會保留A,這樣相互保留的關系很容易形成“保留環”,造成内存無法釋放。

小結

協議是Objective-C 的一種語法,聲明了一套方法,而代理是一種設計模式,可以用協議來實現。

使用協議要注意三個問題:

  1. 指定對象需要實現的方法。

  2. 調用時,先判斷被調用者是否實現某方法。

  3. 聲明為代理的屬性,需要定義為 weak。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
如何讓自己變得優秀的幾個小竅門(如何讓自己變得更加優秀)
如何讓自己變得優秀的幾個小竅門(如何讓自己變得更加優秀)
  要想優秀,首先要敢于伸手去夠那些更高的果子。很多時候把手伸出去、把腳踮起來,已經戰勝了90%的人。   如何讓自己變得更加優秀?   這裡準備了16條法則,希望對你有所幫助。   1   對自己的行為負責   當自己所處的境遇不好的時候,更要多看看自己身上的原因。   有一句話說,你現在在哪兒是你過去兩年來的選擇決定的;你兩年後在哪兒是你接下去兩年中的選...
2025-07-12
越巫自取滅亡的原因(先秦典籍中的火葬探析
越巫自取滅亡的原因(先秦典籍中的火葬探析
  先秦典籍中的火葬探析   姚海濤   (青島理工大學琴島學院,山東青島 266106)   摘要:火葬習俗古已有之。先秦典籍中保留了有關火葬的大量文本證據。大體言之,《周易》中的離卦與火葬有着密切關系,作為刑法處罰方式而存在,主要指向不孝子這一群體。而《墨子》《呂氏春秋》《荀子》《列子》中記錄的火葬主要是作為氐、羌以及儀渠民族的喪葬形制。透過這些現象側面...
2025-07-12
人過四十後看淡簡單的生活(人到四十以後隻有)
人過四十後看淡簡單的生活(人到四十以後隻有)
     塵世間太多的情感,總是虛無缥缈,如水中之月,霧裡看花,追不到,摸不着,守不住,又放不下。   深陷紅塵的我們,常常會迷失在塵世之中,行色匆匆的專注趕路,卻忘了自己,也忘了看看沿途的風景。   一晃,已過而立之年,步入了不惑之年,此時,沉穩,從容才是大境界。   俗話說:四十不惑。過了四十,哪些事情應該堅持,哪些事情應該扔掉,心裡應該有數了。   人...
2025-07-12
如何走出人生規劃的誤區(自控力和對周圍的規劃能力)
如何走出人生規劃的誤區(自控力和對周圍的規劃能力)
     今天我們接着學《弟子規》,一晃馬上要學完了,也就還有那麼兩三天了,昨天我們講了“墨磨偏,心不端,字不敬,心先病。”   我覺得我們現在大家推崇的匠人精神應該是最佳體現了,那種凝神靜氣,然後把手中的小事認真的做好,那麼在大方向上是為大家忘記名利,把手中的事做得紮紮實實,這就是道的具體體現。   今天我們學習的這句話叫“列典籍,有定處,讀看畢,還原處。...
2025-07-12
五年級數學簡便運算題20道有答案(五年級數學簡便運算方法)
五年級數學簡便運算題20道有答案(五年級數學簡便運算方法)
     在孩子的小學數學中,數學的學習,基本内容包含:對數的認識,數的運算,圖形的認識以及運算,還有就是對數的應用,這幾個部分,但是在從1年級到6年級一直學習的一項内容,而且貫穿始終的,那就是簡便運算。   在整數範圍、小數範圍、分數範圍内都會作為一個内容重複出現,而這個内容也正是小學數學中的一個難點。   一、提取公因式   這個方法實際上是運用了乘法分...
2025-07-12
Copyright 2023-2025 - www.tftnews.com All Rights Reserved