首页
/
每日頭條
/
圖文
/
ios怎麼設置多個協議
ios怎麼設置多個協議
更新时间:2026-07-08 09:17:58

首先,協議(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
推荐阅读
湛江黃氏是哪位祖先後人(湛江黃姓的重要一支)
湛江黃氏是哪位祖先後人(湛江黃姓的重要一支)
  黃姓是兩廣地區的重要姓氏,在廣西排第一,在廣東排第二。廣東姓氏前三名是“陳、黃、李”,廣西姓氏前三名是“黃、李、梁”。   在湛江,黃姓也僅次于陳姓,和李姓不相上下。廉江的黃姓排第一,别的縣市區也是二三名的樣子。比如徐聞十大姓氏排名是陳、黃、鄧、李、林、楊、鄭、梁、王、張;遂溪的十大排名是陳、黃、李、周、楊、王、林、梁、鄭、吳。黃排名第二,處于非常重要的...
2026-07-08
青紅椒炒鮮目魚的做法(不容錯過的鮮美滋味)
青紅椒炒鮮目魚的做法(不容錯過的鮮美滋味)
     By 503飛啊   用料   目魚 300克芹菜 适量料酒 1湯勺姜 2片蔥 2根東古醬油 适量白糖 适量   做法步驟      1、目魚清洗幹淨切條 ,燒一鍋水 水開下目魚條燙10秒就撈出,冷水沖洗一下,瀝幹水分後加料酒蔥姜2克鹽拌勻後備用。      2、芹菜清洗幹淨後切成自己喜歡的段。      3、鍋中水燒開,下芹菜燙至變色撈出。   ...
2026-07-08
python常用标準庫整理(100個相見恨晚的Python庫)
python常用标準庫整理(100個相見恨晚的Python庫)
  在python程序員成為大神之前,都不可避免的都要做一段時間的調包俠   那就算是調包俠也都會有自己調包秘籍,拿出來能讓他人感歎“相見恨晚”的那種      在Github上有個awesome-python這麼個項目,能獲得110k stars隻能說知道的人太少了   它總結了Web 框架、網絡爬蟲、網絡内容提取、模闆引擎、數據庫、數據可視化、圖片處理、...
2026-07-08
為什麼不建議養薩摩耶(是誰說薩摩耶好養的)
為什麼不建議養薩摩耶(是誰說薩摩耶好養的)
  都說薩摩耶是“微笑天使”,是的沒錯,微笑起來确實是天使,但是讓人沒想到的是它頂着一個天使的臉龐做着惡魔的事情,到底是誰說薩摩耶好養的?你可真是害慘我了!不由得暗戳戳地懷疑:慫恿我養薩摩耶的人,沒安好心!      勇奪“拆家小霸王”稱号你說長得這麼好看的狗狗,怎麼就這麼能拆家呢?難道它知道自己頂着天使面龐“作惡”沒人會舍得收拾它?這貨跟二哈真是不相上下!...
2026-07-08
澳洲永居可以申請新西蘭永居嗎(如何移民奧地利)
澳洲永居可以申請新西蘭永居嗎(如何移民奧地利)
  奧地利作為世界知名的發達國家,除了“落榜美術生”為人所知外,首都維也納作為世界藝術與音樂之都、多年蟬聯世界最宜居住城市第一名、連續十幾年評選為世界最宜居城市前五等為人所知,但是德語國家的移民政策是非常難的,奧地利作為德語區三強國家之一,移民政策的艱難也為人所知,整個國家沒有合适普通人移民的方法,即使是團聚移民,如果奧地利配偶沒有滿足條件的穩定收入,也不能...
2026-07-08
Copyright 2023-2026 - www.tftnews.com All Rights Reserved