ios - 我应该在我的开源项目中包含自定义类别吗?

标签 ios objective-c open-source

<分区>

我正在构建一个我可能会考虑开源的项目。我有一个 UIView 类别,它使我可以轻松访问设置 x、y 坐标或宽度,并直接留给 UIView,而无需处理框架。 我的问题是,如果我打算开源它,我应该在我的项目中使用这些类别吗?

很多项目都会有类似的类别,比如 UIView 的方法

- (void)setLeft:(CGFloat)left;

- (void)setX:(CGFloat)x;

我的理解是,如果 2 个类别创建一个方法,您将无法保证将调用哪个类别。

那么……我该怎么办?根本不使用类别并在我的开源项目中处理这些恼人的代码?使用类别并可能在方法名称前加上前缀?

谢谢!

最佳答案

不要费心添加这些方法。

它们节省了很少的输入,你真正应该添加的前缀会很丑陋,而且它们几乎没有增加真正的便利,同时使针对添加的 API 编写的代码不再可移植到缺少它的项目。

同样,拥有一堆方便的方法使得子类化变得更加困难。您必须覆盖哪些方法? KVO 的行为是什么?是否有一种原始方法可以让所有内容都通过,或者您真的必须覆盖所有内容吗?

框架通常不会添加这种方便的 API,因为它会在引发上述所有问题的同时给 API 带来很多额外的“重量”。所有这些额外的方法只是开发人员在向项目介绍新人时必须了解、记住并向他人解释的更多数据点。

一个异常(exception)是类簇类; NSString、NSArray 等……它们有一组核心的原始方法,提供实现其余 API 所需的所有功能。抽象类的其余方法完全根据这些原始方法实现。子类化时,您只需实现原语,所有其他行为将“正常工作”。但是,子类可以出于优化或自定义目的自由覆盖任何非基元(尽管要小心,您确实应该保留这种行为)。

一般的经验法则是,如果便利的 API 不能定期保存多于几行代码,那么它就不值得。

关于ios - 我应该在我的开源项目中包含自定义类别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127746/

相关文章:

ios - Facebook 登录 - iOS 9 - 没有 Safari

ios - 无法将 Swift 和 Obj-C 库与 Cocoapods 一起使用

objective-c - 代码设计问题: Is using [self view]; or [self window]; a bad practice?

ios - 永远在后台运行 Swift 2.0 应用程序以将位置更新到服务器

ios - Objective-C,NSTask缓冲区限制

ios - 台风 - 到处注入(inject)相同的实例

c++ - 仅 header C++ 库的类似 LGPL 的许可证

php - 开源语音识别引擎

android - Google play alike 应用开源

ios - 我如何判断 NSData dataWithContentsOfFile 何时加载我的 plist?我什么时候可以获取/分配值?