首页
/
每日頭條
/
圖文
/
ios怎麼設置多個協議
ios怎麼設置多個協議
更新时间:2026-04-19 07:29:19

首先,協議(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
推荐阅读
澳大利亞1
澳大利亞1
  根據澳大利亞氣象局(BOM)的初步數據統計,昨天(17日)是澳大利亞自有氣象記錄以來的最熱的一天。全國平均氣溫為40.9℃,打破了2013年1月創下的40.3℃的紀錄,但根據預測,這一紀錄不可能持續很長時間。随着炙熱的空氣在全國範圍内移動,預計未來幾天氣溫将繼續升高。      △澳大利亞18日全國各地氣溫分布圖(圖片來源:澳大利亞氣象局)   17日,...
2026-04-19
殺顔真卿最兇的人是誰(博物雜志編輯居然稱)
殺顔真卿最兇的人是誰(博物雜志編輯居然稱)
  【博物雜志編輯居然稱“看顔杲卿被殺很過瘾” 結果被停職處理】博物雜志編輯稱,“小時候看顔杲卿被殺的故事覺得很過瘾。”言論近日引起網民輿論。北京時間15日下午,“博物雜志”也在微博公布針對董子凡的處理意見,稱已經嚴厲批評,董子凡将停職反省。      版權聲明:如涉及版權問題,請作者持權屬證明與本網聯系   ,
2026-04-19
六個堅持專家解讀(董振華從六個堅持)
六個堅持專家解讀(董振華從六個堅持)
  從“六個堅持”牢牢把握新時代中國特色社會主義思想的世界觀和方法論   董振華   〔中共中央黨校(國家行政學院)哲學教研部副主任、教授〕   黨的二十大報告指出:“中國共産黨為什麼能,中國特色社會主義為什麼好,歸根到底是馬克思主義行,是中國化時代化的馬克思主義行。擁有馬克思主義科學理論指導是我們黨堅定信仰信念、把握曆史主動的根本所在。”“推進馬克思主義中...
2026-04-19
秦時明月曉夢結局是什麼(秦時明月不可忽視的曉夢大師)
秦時明月曉夢結局是什麼(秦時明月不可忽視的曉夢大師)
  《秦時明月》動畫中儒家是最講究長幼尊卑和禮數的一個門派,桑海儒家小聖賢莊有三位當家,分别是掌門人伏念、二當家顔路和三當家張良,被稱為“齊魯三傑”。三人雖同屬儒家一脈,但性格其實頗為不同,張良身處儒家實則崇尚墨家,顔路喜歡恬淡不問世事,唯有大師兄伏念最講禮數,曾因天明少羽之事責怪兩位師弟。      伏念推崇王道治國,獨創“聖王劍法”,對于儒家學說和天下大...
2026-04-19
将士為什麼跟着安祿山謀反(安祿山怒責顔杲卿背叛)
将士為什麼跟着安祿山謀反(安祿山怒責顔杲卿背叛)
  唐鸩(之五)   常山失守之後,顔杲卿和袁履謙被叛軍押往洛陽,安祿山斥責顔杲卿道:“你從前隻是範陽一個戶曹,因為我的舉薦,幾年之間做到了太守,你為什麼還要背叛我?”   顔杲卿罵道:“你本是一個放羊的羯奴,皇上提拔你做了三道節度使,恩幸無比,你為什麼謀反?我家世代為唐臣,食唐俸祿,從前受過你的保薦,難道就要和你一起謀反?我是為國讨賊,隻恨沒能殺了你,哪來...
2026-04-19
Copyright 2023-2026 - www.tftnews.com All Rights Reserved