IOS常用設計模式——委託模式(IOS開發)

來源:互聯網
上載者:User

IOS常用設計模式——委託模式(IOS開發)

委託模式在之前的部落格中用到了很多,比如各種複雜的Cocoa Touch架構的UI控制項,幾乎都用到了委託來響應控制項事件或控制其他對象。


委託模式

-問題:

處理一切IOS應用都在UIApplication中完成,但是在設計過程中並不友好,它藕合度高,職責不清,難以維護,需要不斷不斷的重構,因此需要把看似功能很複雜的類分解或者指派成功能明確的類。

Apple中我們經常用兩種類,一個是架構類,各種用,不斷的用,啥都能用;另一個就是協議類,就是協議。

協議的目的,終究是降低一個對象的複雜度和藕合度。架構類經常會產生一個保持對象的指標,並在特定時刻向委派物件發送訊息。就像我們常見的“obj delegate = self;”委派物件做些事情或者委派物件控制。

- 原理:

// 委託類PhilosopherDelegate.h@protocol PhilosopherDelegate @required- (void) sleep;- (void) eat;- (void) work;@end// ViewController.h@interface ViewController : UIViewController@end// ViewController.m@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    Philosopher *obj = [[Philosopher alloc] init];    obj.delegate = self;    [obj start];}#pragma -- PhilosoperDelegate方法實現- (void) sleep{    NSLog(@"Sleep...");}- (void) eat{    NSLog(@"eat...");}- (void) work{    NSLog(@"work...");}@end

注意,viewDidLoad方法中的obj.delegate = self語句來指定委派物件和通用類的參考關聯性。


雖然通用類(一般都是UIViewController之類的東東)是UIKit直接提供,但是我們在這個例子中得實現自己的通用類Philosopher,我給出代碼,但是真的不是很重要的部分。

// Philosopher.h#import "PhilosopherDelegate.h"@interface Philosopher :NSObject{    ...}// 可以儲存對象的引用@property (nonatomic, weak) id delegate;- (void) start;- (void) handle;@end// Philosopher.m#import "Philosopher.h"@implementation Philosopher@synthesize delegate;-(void)start{    ...}-(void)handle{    ...}@end

- 具體應用:太多了,好多空間都有委託,主要負責響應控制項事件或控制其他對象。對於那些更複雜的控制項,如UITableView,除了要實現委託協議外,還需要實現資料來源協議。都是委託設計模式的具體應用。

委託的方法是可選的,但資料來源的方法一般是必須實現的!


聯繫我們

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