Loc*_*ike 9 open-source objective-c ios
我正在构建一个我可能考虑开源的项目.我有一个UIView类别,它为我提供了设置x,y坐标或宽度的简单访问器,并直接留给了UIView,而不需要处理框架.我的问题是,如果我计划开源,我应该在我的项目中使用这些类别吗?
很多项目都有类似的类别和UIView的方法
- (void)setLeft:(CGFloat)left;
Run Code Online (Sandbox Code Playgroud)
要么
- (void)setX:(CGFloat)x;
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果两个类别创建一个方法,您将不能保证将要调用哪个方法.
所以我该怎么做?根本不使用类别并在我的开源项目中处理这个烦人的代码?使用类别并可能在方法名称前加上?
谢谢!
bbu*_*bum 11
不要费心添加这些方法.
它们可以节省很少的打字,你真正应该添加的前缀很难看,并且它们几乎没有增加真正的便利,同时使针对添加的API编写的代码不再可移植到缺少它的项目中.
同样,拥有一堆便捷方法会使子类化变得更加困难.您必须覆盖哪种方法?KVO的行为是什么?是否存在一种原始方法,即所有内容都是通过漏洞进行的,或者您是否真的必须覆盖所有内容?
框架通常不会添加这样的便利API,因为它会给API带来很多额外的"重量",同时会产生上面提到的所有问题.所有这些额外的方法只是开发人员在向项目中引入新人时必须了解,记住并向他人解释的更多数据点.
一个例外是类集群类; NSString,NSArray等......他们有一组核心原始方法,提供实现其余API所需的所有功能.抽象类的其余方法完全根据这些原始方法实现.在子类化时,您只需要实现原语,所有其他行为将"正常工作".但是,为了优化或定制目的,子类可以自由地覆盖任何非基元(但是,小心,你真的应该保留行为).
一般的经验法则是,如果一个便利API不能定期保存多行代码,那就不值得了.
由于Objective C不支持名称空间,因此如果您计划共享代码,则确保代码是唯一的常用方法是在方法前添加一些与项目特定相关的字母.
如果将setLeft和setX重命名为LMSetLeft和LMSetX,则应该显着减少冲突的可能性.
只要您使用IDE的重构工具,这也应该是一个非常简单的更改.
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |