它是不好的設計我有一個UIViewController子類(比如MyViewController)。設置self.delegate = self
MyViewController.h
@protocol TargetChangedDelegate
-(void) targetChanged;
@end
@interface MyViewController
@property (weak) id<TargetChangedDelegate> targetChangedDelegate;
-(void) doSomethingOnYourOwn;
@end
MyViewController.m
@implementation MyViewController <TargetChangedDelegate>
-(void) doSomethingOnYourOwn
{
// DO some stuff here
// IS THIS BAD ??
self.targetChangedDelegate = self;
}
-(IBAction) targetSelectionChanged
{
[self.targetChangedDelegate targetChanged];
}
-(void) targetChanged
{
// Do some stuff here
}
@end
在一定條件下基於實例化MyViewController的實例可以決定其自身設置爲代表或不是類。
Foo.m
@property(strong) MyViewController *myVC;
-(void) configureViews
{
self.myVC = [[MyViewController alloc] init];
[self.view addSubview:self.myVC];
if (someCondition)
{
self.myVC.targetChangedDelegate = self;
}
else
{
[self.myVC doSomethingOnYourOwn]
//MyViewController sets itself as the targetChangedDelegate
}
}
參照上面的代碼段,我有以下問題: 它是MVC /代表團設計模式的衝突(或只是一個糟糕的設計)說:
self.delegate = self;
難道不是某種演員模型的表現嗎? – ntohl
它不錯,錯了。爲什麼你可以將委託設置爲self,如果你可以輕鬆地調用沒有委託的方法,就像在同一個類中定義委託一樣。當你與其他班級打交道時,這是正確的,但在同一班級是毫無意義的。 – iphonic
不知道你在做什麼,你可以用'[myVC doSth]'來輕鬆調用函數' – Tj3n