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

3 回答 3

1

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

即使有可能,这也是一个坏主意。你应该像往常一样使用构造函数或属性注入,这样依赖关系就很清楚了,你不会混淆阅读你代码的人。

于 2013-04-08T14:32:00.887 回答
0

添加一个将委托对象作为参数的自定义初始化程序。

像这样:

-(void)initWithFrame:(CGRect)frame delegate:(id)delegate
{
    self = [super initWithFrame:frame];
    if (self) {
         self.delegate = delegate;
..
于 2013-04-08T14:35:58.857 回答
0

你总是可以提供一个新的 initWithFrame 方法:

- (id)initWithFrame:(CGRect) aFrame delegate:(id)aDelegate {
    self = [super initWithFrame:aFrame];
    if (self) {
        self.delegate = aDelegate;
    }
    return self;
}
于 2013-04-08T14:36:16.577 回答