我正在开发一个Cocoa应用程序,目的是在Windows和Linux上使用GNUstep。到目前为止,我一直在避免使用Objective-C 2.0功能,但我真的很想开始使用至少属性。谷歌似乎告诉我(虽然我在这个问题上找不到很多)但是目前,没有任何Objective-C 2.0功能可以与GNUstep配合使用。有没有人知道GNUstep是否有计划来支持@property和@synthesize?
我也想知道是否有一个“扩展”它们的好策略?我当然可以想象一个程序可以使用@property和@synthesize将代码扩展到不使用任何Objective-C 2.0功能的代码中,但是我担心对这样的东西没有太多需求,所以我可能会赢得'能够找到一个。
你觉得GNUstep很有可能会在明年左右支持@property和@synthesize吗?
答案 0 :(得分:12)
这已经晚了几个月,但答案是肯定的; GNUstep将支持Objective-C 2.0功能(以及块)。目前,一切都或多或少地实现,但需要测试和调试。这些功能需要Clang而不是gcc,目前您需要使用trunk版本。
有关详细信息,请参阅David Chisnall在此主题中的解释: http://groups.google.com/group/gnu.gnustep.discuss/browse_thread/thread/b0a5fa4e3be71bb1#
答案 1 :(得分:3)
不,我不知道是否有计划支持房产,但如果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支持。
答案 2 :(得分:2)
我不确定Objective-C的GNUstep实现是否会遵循Apple在accessor / mutator综合方面的领先优势,但如果你想为Mac,Windows和Linux制作应用程序,GNUstep可能不是最好的选择。将代码从Cocoa移植到GNUstep应该很容易(并且您甚至可以编写宏来转换属性声明),但很少有人在Linux上使用GNUstep而在Windows上使用的更少。我喜欢跨平台OpenStep实现的想法,但目前,它并不是真正实用的,采用方式。