最近我發現了webrtc-ios example from Github。當我瀏覽項目時,我注意到VideoView類使用靜態方法,我不確定是否需要。 VideoView是UIView的子類,它覆蓋了兩個初始化方法,initWithFrame:
和initWithCoder:
。我知道覆蓋這些init方法是正常的,然後使用一些方法來設置其他東西,如- (void)setup;
。在Objective C中使用靜態初始化的好處?
但VideoView類使用靜態函數,static 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) { ... }
我認爲這將被認爲是不好的做法。它看起來像有人試圖將C++構造(我猜測)轉化爲objective-c。 – TechZen
我第一次看到這種方法時感到困惑,因爲我沒有看到在這裏使用靜態函數的任何要求。儘管如此,我仍然認爲開發者有他的理由爲什麼他這樣做。 –