9

我正在开发一个 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 吗?

4

3 回答 3

12

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

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

于 2009-11-25T02:32:23.330 回答
3

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

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

这个 SO 答案很好地总结了它。我建议阅读它并得出自己的结论。

同样值得考虑的是,“ objective-c”标签有超过 3280 个问题,而“gnustep”有 9 个问题。我并不是说问题量是质量的衡量标准,但它与活动和兴趣平行,而且相当在这个站点上可能只有少数具有 GNUstep 专业知识的人。因此,如果你选择走你正在考虑的道路,你就不太可能得到好的帮助。

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

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

于 2009-08-09T14:14:01.043 回答
2

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

于 2009-08-09T06:08:49.910 回答