程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Objective-C中的Protocol

Objective-C中的Protocol

編輯:關於C語言

Objective-C中的Protocol


Objective-C中的Protocol

Protocol

簡單來說就是一系列方法的列表,其中聲明的方法可以被任何類實現,這種模式一般稱為(delegation)模式

在iOS中和OS X中,Apple采用了大量的代理模式來實現MVC中的View(UI控件)和Controller(控制器)


下面舉個例子


聲明一個Button類和Buttonlisterner類

在Button.h文件裡


#import 

//類聲明
@class Button;

//<>代表實現某個協議,NSObject為做根本的協議
//ButtonDelegate為協議的名稱
@protocol ButtonDelegate

-(void)onClick:(Button*)but;

@end



@interface Button : NSObject

//nonatomic不需要多線程管理,delegate是按鈕的監聽器

@property(nonatomic,retain) id delegate;

-(void)Click;

@end

在Button.m文件裡


#import "Button.h"

@implementation Button

//-(void)dealloc{
//    [super dealloc];
//}

-(void)Click{
    NSLog(@"Click按鈕被點擊了。。。");
    
    //如果有onClick:的方法則調用此方法
    if ([_delegate respondsToSelector:@selector(onClick:)]) {
        //並且告訴監聽器哪個按鈕被點擊了
        [_delegate onClick:self];
    }
    
}
@end

在Buttonlisterner.h文件裡


#import 
#import "Button.h"


//對協議提前聲明,跟@class的作用是一樣的

@protocol ButtonDelegate;

@interface Buttonlisterner : NSObject


@end

在Buttonlisterner.m文件裡

#import "Buttonlisterner.h"
#import "Button.h"

@implementation Buttonlisterner


-(void)onClick:(Button *)but
{
    NSLog(@"onClick...");
}
@end

在main.m中


int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Button* button = [[Button alloc]init];
        Buttonlisterner* listenter = [[Buttonlisterner alloc]init];
        button.delegate=listenter;
        [button Click];
        
    
    }
    return 0;
}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved