ios – 在Objective C中使用静态init时的优点?

ios – 在Objective C中使用静态init时的优点?,第1张

概述最近我发现了 webrtc-ios example from Github.虽然我正在浏览项目,我注意到VideoView类使用静态方法,我不知道这是否需要. VideoView是UIView的子类,它覆盖了两个init方法initWithFrame:initWithCoder:.我知道覆盖那些init方法是正常的,然后使用一些方法来设置其他的东西,如 – (void)setup; 但VideoV 最近我发现了 webrtc-ios example from Github.虽然我正在浏览项目,我注意到VIDeoVIEw类使用静态方法,我不知道这是否需要.
VIDeoVIEw是UIVIEw的子类,它覆盖了两个init方法initWithFrame: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方法的一个区别是
静态函数不能在子类中覆盖.如果共同的init代码完成
在一个
- (voID)setup;

方法和VIDeoVIEw的子类MyVIDeoVIEw恰好实现了一个名称相同的方法

[[MyVIDeoVIEw alloc] initWithFrame:..]

将调用子类实现,这可能不需要.

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

如果常用的初始化在一个方法中完成,那么方法名称应该更多
具体来说,以避免它被“意外地”覆盖

-(voID)commonVIDeoVIEwSetup;
总结

以上是内存溢出为你收集整理的ios – 在Objective C中使用静态init时的优点?全部内容,希望文章能够帮你解决ios – 在Objective C中使用静态init时的优点?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1110490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存