首页
/
每日頭條
/
圖文
/
ios怎麼設置多個協議
ios怎麼設置多個協議
更新时间:2026-10-15 07:52:20

首先,協議(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
推荐阅读
mg seed高達合集(MGEX機動戰士高達SEEDDESTINY)
mg seed高達合集(MGEX機動戰士高達SEEDDESTINY)
                             ,
2026-10-15
武林外傳郭芙蓉裝病要瓜子(郭芙蓉怒砸同福店)
武林外傳郭芙蓉裝病要瓜子(郭芙蓉怒砸同福店)
  《武林外傳》是我回看次數最多的電視劇,也是我最喜歡的電視劇。第一次看的時候隻覺好笑,後面多看幾次才發現編劇其實設了很多伏筆,很有趣。《武林外傳》劇情緊湊有趣,演員表現自然,會揭示深刻的道理但又不是毒雞湯。最近十年這樣優秀的情景喜劇已不多見,盡管之後甯财神又寫了《龍門客棧》,但總覺得少了些味道。所以我計劃做《武林外傳》的系列劇情品讀,除了回憶經典,也一起來...
2026-10-15
丹佛斯變頻器運行參數說明(丹佛斯變頻器用于礦井通風風機上)
丹佛斯變頻器運行參數說明(丹佛斯變頻器用于礦井通風風機上)
  改善地下通風系統的運行成本确保礦井的可靠通風對于地下礦井工作人員的健康和安全來說至關重要。可靠通風對于确保充分排除柴油機的微粒等物質是必需的。通風運行成本在礦場總電能成本中一般都占有很大比例,如果能夠以最高效的方式進行通風則可以節省大量運營成本。   衆所周知,使用變頻器最靈活、最節能且維修成本最低的礦井通風風機控制方法。用于控制住地面通風風機、輔助通風...
2026-10-15
你真的看懂犬夜叉了嗎(你從沒注意到的暖心時刻)
你真的看懂犬夜叉了嗎(你從沒注意到的暖心時刻)
  《犬夜叉》主要講述的是要與人之間的故事與大部分同類的故事相同,大部分劇情都是以戰鬥為主,但是《犬夜叉》在戰鬥的同時,卻與其他同類動漫有所不同,《犬夜叉》除了暢快淋漓的打鬥以外,還是部非常虐心的作品,劇中《犬夜叉》與桔梗的接吻不知道看哭了多少人,所以《犬夜叉》中很少有熱血,有的隻是各種感人的暖心、虐心瞬間。      有很多瞬間是作者可以表達出來的,但是也...
2026-10-15
農村山上的野果有幾種(農村山坡上一野果樹)
農村山上的野果有幾種(農村山坡上一野果樹)
  回想起以前,在農村的秋冬季節裡,漫山遍野都是熟透的野果,雖然那會沒有過多的錢去買各種美味進口水果,但是能夠有吃不完的野果子,這都讓兒時在鄉下的孩子們十分滿足了。所以,今天還是給大家介紹一款在農村很常見的野果,看看小夥伴們究竟有多少人都見過吧!      農村山坡上一“野果樹”,可結出小柿子,風幹在樹上,十多元一斤!   今天給大家介紹的這種植物,在鄉下地...
2026-10-15
Copyright 2023-2026 - www.tftnews.com All Rights Reserved