返回一个类本身的实例

时间:2011-06-18 22:13:13

标签: iphone objective-c

我正在尝试编写UIToolbar子类并遇到问题。这是我第一次真正尝试对任何东西进行分类,所以请原谅我,如果它是愚蠢的东西。我无法弄清楚如何从自己的内部返回类的实例。 例如

keyboardToolBar *toolbar;
@property (nonatomic, retain) keyboardToolBar *toolbar;
toolbar = [[keyboardToolBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 50)
-(keyboardToolBar*)initWithFrame:(CGRect)frame{

keyboardToolBar *keyboard = [[keyboardToolBar alloc] initWithFrame:frame];<--how can i do this
//do stuff with keyboard
return keyboard;
}

我认为上面的内容将停留在调用init的无限循环中,调用init等等,那么如何从自己的init方法中返回一个类的实例,或者有更好的方法来实现这一点。

感谢

DARC

2 个答案:

答案 0 :(得分:1)

这里有很多不清楚的事情。你想创造便利方法吗?在这种情况下,您应该将其称为keyboardToolbarWithFrame:并像

一样实现它
+ (id)keyboardToolbarWithFrame:(CGRect)frame {
    return [[[self alloc] initWithFrame:frame] autorelease];
}

注意+符号表示它是一种类方法。这将为您提供一个自动释放的课程实例。

现在,如果您只是尝试将其超类分类为必要的初始化,则可以删除该方法。它将调用超类'initWithFrame:方法。但通常你自己的实现将是这样的,

- (id)initWithFrame:(CGRect)frame {
    self = [super init];
    if ( self ) {
        // Do your class initializations here.
    }

    return self;
}

答案 1 :(得分:0)