是否可以将委托变量分配给调用对象?

时间:2013-04-08 14:30:06

标签: ios uiview

我大部分时间都这样做:

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];
..

3 个答案:

答案 0 :(得分:1)

不,这是不可能的。你必须检查调用堆栈或我不推荐的东西。没有标准设施。

即使有可能,也不是一个好主意。您应该像往常一样使用构造函数或属性注入,因此依赖关系是明确的,并且您不会混淆正在阅读代码的人。

答案 1 :(得分:0)

添加一个自定义初始值设定项,将委托对象作为参数。

像这样:

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

答案 2 :(得分:0)

您始终可以提供新的initWithFrame方法:

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