首页
/
每日頭條
/
圖文
/
ios怎麼設置多個協議
ios怎麼設置多個協議
更新时间:2026-01-21 09:23:55

首先,協議(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-01-21
老九門張藝興和誰演夫妻(老九門演張藝興妻子)
老九門張藝興和誰演夫妻(老九門演張藝興妻子)
  每次小說改編電視劇,都會讓一波書粉難以忍受。在現在改編的所以作品中,小編最喜歡的就是《鎮魂》和《琅琊榜》了,可以說和原著一樣精彩,難分高下。《聽雪樓》也是一部經典作品,改編成電視劇後,袁冰妍飾演 了女主舒靖容,和秦俊傑飾演的蕭憶情開始進入觀衆的視野。但是二人卻将一部虐心的熱血劇演成了腦殘的偶像劇,真的讓人不忍直視。袁冰妍沒有展現出原著中女主的氣勢,顔值清...
2026-01-21
狂飙老默扮演者發抖音告别翠玉軒(對話狂飙老默馮兵)
狂飙老默扮演者發抖音告别翠玉軒(對話狂飙老默馮兵)
  來源:【海報新聞】   大衆網·海報新聞記者 李子驕 張海振 報道   觀衆真正看到演員馮兵,是從《狂飙》開始。在劇中,他飾演人狠話不多的陳金默(老默),一位冷血的“棒棒糖殺手”,也是一位疼愛女兒的父親。他的一個“眼神殺”,幾乎一秒之内,就讓觀衆入戲。   馮兵出生在山東淄博,畢業于北京電影學院,并且還是一名有着十六年軍齡的退役軍人,軍旅經曆造就了他身上...
2026-01-21
魏碑極品圖(魏碑中的極品穆亮墓志)
魏碑極品圖(魏碑中的極品穆亮墓志)
  有人挖出一件1500年前的驚豔楷書,這也許隻是普通工匠所刻…   盜墓這個行業由來已久,在中華文明建立之初,宗法制度初具規模的時候,盜墓的行業便已經悄然拉開了序幕。   在書法界也有這樣的一位宗師級的人物曾經盜過墓,據說鐘繇曾經為了得到了一部筆法秘笈,曾經盜過大書法家韋誕的墓,成為後世探求筆法之秘的一個案例。      魏碑《穆亮墓志》楷書高清拓片   ...
2026-01-21
衛生間馬桶置物架加寬加大(毛巾架裝馬桶上面)
衛生間馬桶置物架加寬加大(毛巾架裝馬桶上面)
  大多數人裝修房子的時候隻注重客廳和卧室的位置,其實衛生間空間也應該重視起來。因為進出衛生間的頻率其實非常高,特别是家裡有老人和小孩的話,就更要仔細裝修。衛生間雖然不大,但裝修不當對生活也會有很大影響。      比如說,把毛巾架裝在馬桶上,很多家庭都是這樣做的,平時洗澡的時候,更方便放要換的衣服。這樣的擺放雖然方便了洗澡,但同時也存在一些問題,毛巾架直接...
2026-01-21
Copyright 2023-2026 - www.tftnews.com All Rights Reserved