Ios 在目标C中使用静态init的好处?

Ios 在目标C中使用静态init的好处?,ios,objective-c,webrtc,Ios,Objective C,Webrtc,最近我发现。当我浏览这个项目时,我注意到VideoView类使用静态方法,我不确定这是否必要。 VideoView是UIView的子类,它覆盖两个init方法,initWithFrame:和initWithCoder:。我知道重写那些init方法然后使用一些方法来设置其他东西是正常的,比如-(void)setup 但是VideoView类使用静态函数,静态void init(VideoView*self)。问题是使用静态函数和普通ObjC方法相比有什么好处 VideoView类中的代码如下所示:

最近我发现。当我浏览这个项目时,我注意到VideoView类使用静态方法,我不确定这是否必要。 VideoView是UIView的子类,它覆盖两个init方法,
initWithFrame:
initWithCoder:
。我知道重写那些init方法然后使用一些方法来设置其他东西是正常的,比如
-(void)setup

但是VideoView类使用静态函数,
静态void init(VideoView*self)
。问题是使用静态函数和普通ObjC方法相比有什么好处

VideoView类中的代码如下所示:

-(id)initWithFrame:(CGRect)frame {

     if (self = [super initWithFrame:frame]) {
         init(self);
     }
     return self; 
}

-(id)initWithCoder:(NSCoder *)aDecoder {

     if (self = [super initWithCoder:aDecoder]) {
         init(self);
     }
     return self; 
}

 static void init(VideoView *self) { ... }

使用静态函数和Objective-C方法之间的一个区别是 不能在子类中重写静态函数。如果完成了公共初始化代码 在一个

方法,并且
VideoView
的子类
MyVideoView
碰巧实现了一个同名的方法,然后

[[MyVideoView alloc] initWithFrame:..]
将调用可能不需要的子类实现

在代码中,
initWithFrame
/
initWithCoder
将始终调用本地
init()
函数,即使 初始化子类的实例

如果公共初始化是在一个方法中完成的,那么方法名应该更大 例如,为了避免被“意外”覆盖,请指定

-(void)commonVideoViewSetup;

我认为这会被认为是不好的做法。看起来有人试图把C++构造(我猜)变成Objto-C.我第一次看到这种方法时感到困惑,因为我看不到在这里使用静态函数的任何要求。我仍然认为开发者有他这样做的理由。
-(void)commonVideoViewSetup;