iOS複習筆記11:協議和代理

來源:互聯網
上載者:User

標籤:objective-c   ios   delegate   

一 功能
可以在協議中聲明方法(不能聲明變數),
某個類只要遵守這個協議,就相當於擁有協議中所有的方法聲明。
父類准守協議,子類也擁有協議中的方法。
協議也可以准守另一個協議。
基協議NSObject(同時也是基類),NSObject基類也准守基協議。
基協議中包含了常用的記憶體管理方法:release,retain方法等。


二 定義
1 協議定義
@protocal 協議名 <NSObject>
// 聲明方法
@end


2 遵守協議
2.1 類
@interface 類名 : 父類名 <協議名1, 協議名2...>
@end


2.2 協議
@protocal 協議名 <協議名1, 協議名2...>
@end


3 關鍵字
@required 要請實現,不實現有警告
@optional 可選實現


4 定義一個必須准守某個協議的變數
NSObject <協議名> obj1;
id <協議名> obj2;
@property (nonatomic, strong) id <協議名> p;


三 程式碼範例

// MyProtocal.h@protocal MyProtocal <NSObject>- (void)protocolDefaultFun();@required // 預設值,要求實現,不實現會警示告- (void)protocolRequiredFun();@optional // 可選實現- (void)protocolOptionalFun();@end

// MulProtocal.h@protocal MulProtocal <NSObject>- (void)mulProtocolDefaultFun();@end

// Person.h#import <Foundation/Foundation.h>@protocal MyProtocal;@protocal MulProtocal;// 或者 @protocal MyProtocal, MulProtocal;// 只要一個類准遵守了一個協議,就擁有協議中聲明的所有方法@interface Person : Object <MyProtocal, MulProtocal>@end


// Person.m#import "Person.h"#import "MyProtocal.h"#import "MulProtocal.h"@implementation Person <MyProtocal, MulProtocal>- (void)protocolDefaultFun(){}- (void)protocolRequiredFun(){}- (void)protocolOptionalFun(){}- (void)mulProtocolDefaultFun(){}@end


// main.m#import <Foundation/Foundation.h>#import "MyProtocal.h"#import "Person.h"int main(){// 聲明一個遵守了MyProtocal的對象NSObject<MyProtocal>* obj1 = [[Person alloc] init];obj1 = nil;id<MyProtocal> obj2 = [[Person alloc] init];obj2 = nil;// return 0;}


四 代理

// ticketDelegate.h@protocol ticketDelegate <NSObject>- (int) leftTicketsNumber;@end

// Agent.h@protocol ticketDelegate;@interface Agent : NSObject <ticketDelegate>@end// Agent.m#import "Agent.h"#import "ticketDelegate.h"@implementation Agent- (int) leftTicketsNumber{return 1;}@end

// Person.h@class Agent;@class ticketDelegate;@interface Person : NSObject- (void)buyTicket;// 代理屬性@property (nonatomic, retain) id <ticketDelegate> delegate;@end

// Person.m#import "Person.h"#import "Agent.h"@implementation Person- (void)buyTicket{if ( _delegate & [_delegate leftTicketsNumber] > 0){NSLog(@"buy ticket");}}@end

// main.m#import "Person.h"#import "Agent"int main(){@autopool{Person* p = [[Person alloc]init];Agent* a = [[Agent alloc] init];p.delegate = a;[p buyTicket];}return 0;}




iOS複習筆記11:協議和代理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.