從C++到objective-c—-委託(模板方法)

來源:互聯網
上載者:User


在上篇中,簡單介紹了委託如何?,在Core
Location架構中,委託與協議共同使用,實現了對象間解耦及靈活性的問題,現在在上一份代碼的基礎上,新增加一個協議,即ManagerDelegate,此協議只有一個方法decideFrameDescription,這就構成了一個委託機制(delegation)(設計模式的一種)。

代碼(點擊這裡下載)

//環境

//Mac OS X 10.3.7

//Xcode Version 4.3.2 (4E2002)  為了IOS 5.1 升級了新版本的xcode

//代碼中NSObject *可以用id類型替換

#import <Foundation/Foundation.h>@protocol ManagerDelegate <NSObject> //協議- (BOOL) decideFrameDescription;@end

通過Delegate實現此協議,即

@interface Delegate : NSObject<ManagerDelegate>//綁定MangerDelegate@property NSInteger number;-(id)init;@end

#pragma mark-#pragma mark ManagerDelgate//實現協議-(BOOL) decideFrameDescription{    return NO;    //通過return YES 或者 NO,來控制架構的描述}@end

最終架構會在根據使用者在Delegate中協議的描述,完成架構裡相應方法的變化,在本例中是

@implementation MyFrameWork@synthesize delegate,decide;- (NSString *) description{    if([self.decide decideFrameDescription]){        return (@"I am a MyFrameWork");    }    else{        return (@"I am a decided MyFrameWork");    }}

在架構中需聲明協議接受的物件類型,如下

@protocol ManagerDelegate; //對協議聲明的引用@interface MyFrameWork : NSObject{}@property (nonatomic,assign)NSObject   *delegate;//委派物件的指標,類型為NSObject,即一切objective-c類的父類@property (nonatomic,assign)id<ManagerDelegate> decide;//聲明需要接受實現了ManagerDelegate協議的對象- (id)init;- (void) callDelegate;@end

最終,我們通過在Delegate中實現ManagerDelegate協議,而架構通過decideFrameDescription的傳回值,實現了改變。像在Cocoa touch架構中,如果我們要使用一個picker(選取器),但架構不知道我們要的是幾個組件的picker和每個組件的內容,所以需要在我們的ViewControler中實現<UIPickerViewDelegate>和<UIPickerViewDataSource>.如果在numberOfComponentsInPickerView中返回2,完成numberOfRowsInComponent的組件選擇,完成UIPickerViewDataSource協議。
運行顯示效果如:


    <此例為其他工程>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.