2013-04-08 93 views
0

大多數時候,我這樣做:委託變量是否可以分配給調用對象?

self.someVC = [myVC alloc] initWithFrame:frame]; 
self.someVC.delegate = self; 

是否有辦法來自動設置委託變量?

-(void)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.delegate = [the object that is calling initWithFrame]; 
.. 

回答

1

不,這是不可能的。您將不得不檢查調用堆棧或我不推薦的內容。這沒有標準的設施。

即使這是可能的,這將是一個壞主意。您應該像平常一樣使用構造函數或屬性注入,這樣依賴性就很清晰,並且不會讓讀取代碼的人感到困惑。

+0

我一直在做「通作爲參數」的把戲,但希望對周圍的工作,如這種模式經常發生。 – 2013-04-09 13:27:20

0

添加將委託對象作爲參數的自定義初始值設定項。

像這樣:

-(void)initWithFrame:(CGRect)frame delegate:(id)delegate 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.delegate = delegate; 
.. 
0

你總是可以提供一個新的initWithFrame方法:

- (id)initWithFrame:(CGRect) aFrame delegate:(id)aDelegate { 
    self = [super initWithFrame:aFrame]; 
    if (self) { 
     self.delegate = aDelegate; 
    } 
    return self; 
} 
相關問題