日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS Protocol 详解

發布時間:2023/12/16 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS Protocol 详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

Protocol(協議)的聲明看起來類似一個類的接口,不同的是Protocol沒有父類也不能定義實例變量。Protocol是一種特殊的程序設計結構,用于聲明專門被別的類實現的方法。因為OC是單繼承的,由于不支持多繼承,所以很多時候都是用Protocol和Category來代替實現多繼承。Protocol只能定義公用的一套接口,但不能提供具體的實現方法。也就是說,它只告訴你要做什么,但具體怎么做,它不關心。

Protocol的基本用途:

(1)可以用來聲明一大堆方法(不能聲明成員變量)

(2)只要某個類遵守了這個協議,就相當于擁有這個協議中的所有方法聲明

(3)只要父類遵守了某個協議,就相當于子類也遵守了

(4)和java中的接口很相似,但比接口功能更豐富

?

二、創建與遵守Protocol

1、創建Protocol

創建Protocol很簡單,如下圖:

比如我們填寫的文件名為MyProtocol,之后會生成一個MyPotocol.h文件,文件內容如下:

?

#import <Foundation/Foundation.h>//注意下面的NSObject是基協議,而不是之前的基類 @protocol MyProtocol <NSObject>//在此聲明方法@end

之后我們就在其中聲明需要的方法,但要注意的是這里只做聲明,不做實現。并且不能聲明變量。具體的實現要在遵守這個協議的類中實現,綜上,protocol就是用來聲明方法的。

?

協議可用定義在單獨.h文件中,也可用定義在某個類中:

(1) 如果這個協議只用在某個類中,應該把協議定義在該類中

(2) 如果這個協議用在很多類中,就應該定義在單獨文件中

?

2、基協議

(1)NSObject是一個基類,是最根本最基本的類,任何其他類最終都要繼承它

(2)其實還有一個協議,名字也叫NSObject,它是一個基協議,最根本最基本的協議

(3)NSObject協議中聲明了很多最基本的方法,比如description、retain、release等

(4)建議每個新協議都要遵守NSObject協議

?

3、協議中方法聲明的關鍵字

(1) @required?(默認)

要求實現,如果沒有實現,會發出警告,但不報錯

(2) @optional

不要求實現,不實現也不會有警告

例如:

@require

– (void)test;

?

@optional

– (void)test2;

?

4、遵守協議

首先要#import “協議文件名.h”或者@protocol 協議名稱,但是使用@protocol 協議名稱時只是告訴下面代碼這是一個協議,但不知道協議里面有什么東西,一般只在用到協議內容的時候在#import”協議文件名.h”。在實際開發中常用@protocol 協議名稱。

(1) 類遵守協議

@interface 類名 : 父類名 <協議名稱1, 協議名稱2>

@end

(2) 協議遵守協議

@protocol 協議名稱 <其他協議名稱1, 其他協議名稱2>

@end

?

5、定義一個變量的時候,限制這個變量保存的對象遵守某個協議

類名<協議名稱>?*變量名;

NSObject<MyProtocol> *obj;

id<協議名稱> 變量名;

id<MyProtocol> obj2;

如果obj和obj2沒有遵守MyProtocol的協議,編譯器會警告。

?

6、@property中聲明的屬性也可用做一個遵守協議的限制

@property (nonatomic, strong) 類名<協議名稱> *屬性名;

@property (nonatomic, strong) Dog<MyProtocol> *dog;

@property (nonatomic, strong) id<協議名稱> 屬性名;

@property (nonatomic, strong) id<MyProtocol> dog2;

?

三、Protocol的一個簡單示例

例如:

我們新建一個Protocol,命名為HelloProtocol,然后就只會生成一個HelloProtocol.h文件,注意肯定沒有.m文件,協議只是用來聲明方法,并不是來實現的。

#import <Foundation/Foundation.h>@protocol HelloProtocol <NSObject>//默認就是required; @required - (void)requiredMethod;@optional - (void)optionalMethod;@end

?

新建Person類,在Person.h中引入協議,如下:

#import <Foundation/Foundation.h> #import "HelloProtocol.h"@interface Person : NSObject<HelloProtocol>@end

Person.m如下:

#import "Person.h"@implementation Person- (void)requiredMethod{NSLog(@"requiredMethod——必須實現的方法"); }- (void)optionalMethod{NSLog(@"optionalMethod——選擇實現的方法"); }@end

之后在main.m中創建Person的對象去調用這些方法:

#import <Foundation/Foundation.h> #import "Person.h"int main(int argc, const char * argv[]) {@autoreleasepool {Person *jack = [[Person alloc] init];[jack requiredMethod];[jack optionalMethod];}return 0; }

例子很簡單,這里不做過多講解~

原創文章,轉載請注明:?轉載自李峰峰博客

本文鏈接地址:?iOS Protocol詳解

總結

以上是生活随笔為你收集整理的iOS Protocol 详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。