在iOS中是否有一个始终被调用的init方法?

nap*_*aza 5 cocoa-touch objective-c init ios

是否有一个总是在Cocoa中调用的方法?许多类都有init或者initWith,但更糟糕的是它们可以从笔尖或其他东西加载.在这种情况下,我不想在周围找到它是如何做到的.我只是想设置一些初始变量和其他的东西,我想一个方法子类,我可以依靠不管它是一个UIView,UIViewController或者UITableViewCell

bor*_*den 9

不,没有这样的方法. init来自NSObject所以每一个对象都可以使用它,以及子类定义自己的初始化方法. UIView例如,定义initWithFrame:并且还有来自协议的init方法,例如NSCoding定义的方法initWithCoder:.这是Objective-C的动态特性,任何东西都可以随时扩展.话虽如此,有一些模式. UIViewController几乎总是需要initWithNibName:bundle:,UIView几乎总是需要initWithFrame:initWithCoder:.我所做的是制作一个内部初始化方法,让其他人调用它.

- (void)initialize
{
    //Do stuff
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if(self)
    {
        [self initialize];
    }
}

- (id)initWithCoder:(NSCoder *)aCoder
{
    self = [super initWithCoder:aCoder];
    if(self)
    {
        [self initialize];
    }
}
Run Code Online (Sandbox Code Playgroud)