最近我发现来自 Github 的 webrtc-ios 示例 https://github.com/gandg/webrtc-ios。当我浏览该项目时,我注意到 VideoView 类使用静态方法,但我不确定这是否必要。
VideoView 是 UIView 的子类,它重写了两个 init 方法,initWithFrame:
and initWithCoder:
。我知道重写这些 init 方法然后使用某种方法来设置其他内容是正常的,例如- (void)setup;
.
但是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) { ... }
使用静态函数和 Objective-C 方法之间的一个区别是
静态函数不能在子类中被重写。如果公共初始化代码完成
在一个
- (void)setup;
方法和子类MyVideoView
of VideoView
碰巧实现了同名的方法,那么
[[MyVideoView alloc] initWithFrame:..]
将调用子类实现,这可能是不需要的。
在你的代码中,initWithFrame
/initWithCoder
总会打电话给当地的init()
函数,即使
子类的实例被初始化。
If常见的初始化是在method,那么方法名应该多一些
具体来说,以避免它被“意外”覆盖,例如
-(void)commonVideoViewSetup;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)