2017-03-28 28 views
0

在iOS中,什麼阻止我有一個對象的代表列表?我知道你不是應該這樣做,但我不明白,如果它只是因爲它不符合委託模式,或者如果這樣做有一些真正的技術問題。我將解釋什麼,我是指用一個例子:爲什麼不能有一個代表在iOS中的代表列表

協議:

@protocol MyDelegate <NSObject> 

- (void) someMethod; 

@end 

類的頭:

@interface SomeClass : NSObject 

// Correct use of delegate pattern 
@property (nonatomic, weak) id<MyDelegate> delegate; 
// Incorrect use of delegate pattern 
@property (nonatomic, strong) NSArray<id<MyDelegate>> delegates; 

@end 

類實現:

@implementation SomeClass 

// Correct use of delegate pattern 
- (void) someMethodThatCallsDelegate { 

    ... 

    [_delegate someMethod]; 
} 

// Incorrect use of delegate pattern 
- (void) someMethodThatCallsDelegate { 

    ... 

    for(id<MyDelegate> delegate in _delegates) { 
     [delegate someMethod]; 
    } 
} 

@end 

在我自己的項目,我經常發現自己處於幾個對象想要知道某個事件的情況。通常在網絡類中。在這些情況下,我只是使用NSNotificationCenter來代替,但是隻是有一個代表該對象的列表的想法總是吸引我(因爲我也是一個Android程序員,其中一組監聽器是完全正常的)。那麼,沒有代表名單的原因是什麼?

(我也明白,在許多情況下,它是壞的設計有一個對象不止一個代表,但我說的是它是不是情況,比如在網絡代碼)

回答

1

沒有什麼阻止你這樣做。實際上,這可能是我使用的協議超過代表等等...

但是,我會考慮你稱之爲對象和協議。

A delegate是您主要對象「委託」工作的一些對象。一個表視圖(例如)知道它必須有許多行,部分等等,但不是計算這些本身,而是說「我的委託人會爲我做這個工作」。然後它允許相同的tableview與任何委託進行交互。

你的對象顯然不是那樣的,因爲它們中有很多。儘管如此,它們可能都有一些共同的用法這是什麼用法?代表使用正確的詞彙嗎?

如果它們都是「聽衆」,那麼使用函數someListenedToActionWasTriggered調用協議Listener並調用數組listeners會更有意義。

+2

從你的回答中我剛纔知道,代表團更多地指的是讓其他班級爲你做一些工作或者決定一些事情,而不是告知發生了什麼事情(?)。我認爲你只是在我的知識中修正了一個漏洞。謝謝。 – Joakim