【问题标题】:Will GNUstep support @property and @synthesize?GNUstep 会支持@property 和@synthesize 吗?
【发布时间】:2009-08-09 04:46:31
【问题描述】:

我正在开发一个 Cocoa 应用程序,打算使用 GNUstep 在 Windows 和 Linux 上使用它。到目前为止,我一直在避免使用 Objective-C 2.0 的特性,但我真的很想至少开始使用属性。谷歌似乎告诉我(尽管我很难找到关于这个主题的很多内容)是目前,没有任何 Objective-C 2.0 功能可与 GNUstep 一起使用。有谁知道 GNUstep 是否有计划支持@property 和@synthesize?

我也想知道是否有“扩展”它们的好策略?我当然可以想象一个程序可以将使用 @property 和 @synthesize 的代码扩展为不使用任何 Objective-C 2.0 特性的代码,但我担心这样的东西没有太多需求,所以我可能不会一个都找不到。

您认为 GNUstep 很有可能在明年左右支持 @property 和 @synthesize 吗?

【问题讨论】:

  • 关于“不要这样做!”的主题:这是一个有趣的情况——我在 Foundation 之外不需要太多,大部分代码都是我自己的类,以及相当多的 XML 读写。因此,我认为与 GNUstep 保持兼容并不是什么大问题。至于让我的用户安装运行时,我希望通过一个编写良好的安装程序来解决这个问题,如果他们愿意,它可以为他们处理一切。 (不过,我很想听听您对这两点的任何反对意见。)
  • 如果有人试图这样做:我从来没有能够让 Obj-C 2.0 与 GNUstep 一起工作,但它似乎与 Cocotron 一起工作得很好(尽管你需要访问 Mac 进行编译) .

标签: objective-c gnustep


【解决方案1】:

这晚了几个月,但答案是肯定的; GNUstep 将支持 Objective-C 2.0 特性(以及块)。目前,一切都或多或少地实现了,但需要测试和调试。这些功能需要 Clang 而不是 gcc,目前需要使用 trunk 版本。

有关详细信息,请参阅此线程中 David Chisnall 的解释: http://groups.google.com/group/gnu.gnustep.discuss/browse_thread/thread/b0a5fa4e3be71bb1#

【讨论】:

【解决方案2】:

不,我不知道是否有计划支持属性,但如果 GNUstep 计划保持可行(即使只是在目前的有限程度上),这应该是一个优先事项。除非 GNUstep 决定采用 Objective-C 2.0 特性,否则它与 Apple 实现之间的差距将使编写好的跨平台代码变得越来越困难。 (对于大多数开发人员来说,这已经毫无意义了。)

虽然我通常讨厌基本上说“不要那样做,这是个坏主意”的答案,但我必须同意@Jonathan 在这一点上的看法,尤其是从实用性的角度来看。尽管代码可以跨平台编译,但如果用户必须安装运行时才能使用您的应用,那么有人会使用您的应用的可能性就会大大降低。

This SO answer 总结得很好。我建议阅读它并得出自己的结论。

同样值得考虑的是,“objective-c" 标签有超过 3280 个问题,而"gnustep" 有 9 个问题。我并不是说问题数量是质量指标,而是与活动和兴趣平行,并且很可能在这个站点上具有 GNUstep 专业知识的人很少。因此,如果您选择走您正在考虑的道路,那么您不太可能获得好的帮助。

顺便说一句,以兼容性的名义避免新功能的心态是一种“最小公分母”行为,从长远来看,这会使您的代码不那么优雅,也不那么“功能强大”。这类似于仅使用 10.2 或 10.3 上可用的 API 进行编码——任何最近的 OS X 或 iPhone 开发人员都会告诉您,他们宁愿利用很酷的新功能,而不受过去限制的阻碍。如今,新应用几乎总是需要 10.5 — 对旧版本的支持更多是已建立的向后兼容软件的特征,许多应用甚至会随着时间的推移放弃旧操作系统。

如果您正在考虑销售应用程序,那么仅使用与 GNUstep 兼容的 API 将严重限制您的市场,甚至会从根本上限制您的应用程序,包括您希望达到的优化水平和功能。即使应用程序不会商业化,使用最适合给定平台的语言和框架通常也有好处。如果您真的在寻找跨平台支持,Java 可能会让您更接近并减少胃灼热。 (Java 绝对不是我最喜欢的语言,它也不是 Cocoa,但它做了很多事情。)虽然仍然存在跨客户端和跨平台的语言版本问题,但至少它是 设计跨平台,所有消费者平台都有可靠的 Java 支持。

【讨论】:

    【解决方案3】:

    我不确定 Objective-C 的 GNUstep 实现是否会追随 Apple 在访问器/修改器综合方面的领先地位,但如果您尝试为 Mac、Windows 和 Linux 制作应用程序,GNUstep 可能不是最佳选择.将代码从 Cocoa 移植到 GNUstep 应该很容易(你甚至可以编写一个宏来转换你的属性声明),但是很少有人在 Linux 上使用 GNUstep,在 Windows 上使用的人更少。我喜欢跨平台 OpenStep 实现的想法,但目前,在采用方面并不实用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2011-07-05
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多