Objective-C和Android

Tom*_*m R 18 java iphone android objective-c android-ndk

我刚刚为Android完成了一个相对较大的项目,它在我的口中留下了一种苦涩的味道,因为它知道它永远不会在太阳系这一侧最普遍存在的手机之一上运行(那个水果味的那个俱乐部).

因此,对于我的下一个项目,我想以一种方式编写它,使大多数组件可以在iPhone和Android平台之间轻松传输.我想这样做的方法是在Objective-C中编写大部分代码,然后分别在更多的Objective-C和Java中添加特定于平台的部分.在Android方面,这将需要使用NDK.

我对C的了解很好,但是我对Objective-C的了解接近于零,我不想学习C++.上面的方法是否合理,是否有更好的方法?有没有什么方法可以用Java编写代码并仍然可以进入未被黑客入侵的iPhone市场?我知道的人(iPhone用户)明年将拥有Android手机的可能性有多大?

Ken*_*ner 22

退一步思考一下你最终能够在逻辑上分享什么.

UI模型相当不同,组件不同.最后,您可能能够共享的是数据对象类,可能还有一些算法.它甚至不像现在那样真实地结束共享网络代码,因为你不是直接使用套接字,而是使用HTTP库.

那么你所付出的所有努力到底真的能找到回报吗?在我看来,最终的结果将是一个难以更新的脆弱的混乱,并且在两个平台上都是平庸的,而不是两者都很好.

你为什么要写应用程序?为了让您或您的用户更轻松的生活?

  • 它可能会给你带来惊喜,但即便在今天,尽管有一些人的努力,但并非所有的世界都适合HTTP请求. (12认同)
  • 要问的并不是太多......但宇宙不容易经常回答这些请求! (8认同)
  • 我完全不同意这个评论.您可以跨平台共享大量行为代码.使用TDD等方法会迫使您将平台代码与业务逻辑分开.此外,还有一个开放的市场,可以在手机上同样使用一致的应用程序. (4认同)
  • 根据我的经验,行为代码是如此的边缘,以至于不值得将整个项目分成几个共享psudeocode的页面.您可以在不共享代码的情况下保持应用程序的一致性,甚至更多,如果您愿意进行大量自动化测试以确保一致性.保持代码分离的原因是一个问题:您希望您的应用程序在运行的任何平台上保持一致或优秀吗?你不能两者兼得.在所有平台上运行相同的应用程序始终都有可以改进的区域. (3认同)
  • @asveikau这是一个打印出来并张贴在墙上的声明! (2认同)

and*_*n22 15

其他人基本上已经这样说了,但我想让它更明确.你最好的选择可能是写:

  1. 跨平台数据模型和核心逻辑,使用:
    • 的比特GNUstep的(的OBJ-C),或
    • CF-Lite(C),或
    • 无论你想要什么,只要它是跨平台的:P
  2. 仅使用iPhone的界面代码,使用Cocoa Touch(Obj-C)
  3. 仅支持Android的界面代码,但是他们为Android执行此操作.

那就是你能得到的尽可能接近; 任何编写跨平台接口代码的尝试无疑都会在两个平台上产生一个平庸的应用程序.但让所有的休息你的代码的移植,只是一个包装设备接口周围做所有的时间,并已对一些iPhone开发伟大的工作.


Chu*_*uck 11

没有Cocoa的Objective-C不是那么有用,也不会让你更接近拥有一个可用的iPhone代码库.使用Core Foundation在C语言中编写核心并使用Java或Objective-C作为平台特定部分可能会更好.Apple已经开放了大量的Core Foundation作为CF-Lite,并且它与OS X上的Cocoa进行了免费的桥接(即你可以与他们的Cocoa对应物交替使用许多CF类).

  • Objective-C看起来是一个没有Cocoa的完美合理的语言.几乎没有人在没有Cocoa的情况下使用它,因为在所有非Mac平台上都有更流行的语言,但我认为没有理由不使用它.它是gcc的一部分,所以它几乎可以在任何Unix或Linux平台上使用. (3认同)

asv*_*kau 9

我的猜测是没有经验来支持它,你可能以某种方式用Google的NDK编写Obj-C,因为GCC存在于ARM,是开源的,有一个Obj-C编译器和一个基本的Obj-C运行时(如果它还没有被攻击,可能会被新的架构攻击),等等.

对于可疑的好处,这也可能是很多工作.

当然,"Obj-C"(没有NS课程)意味着与"可可"截然不同的东西,这是大多数人在说"Obj-C"时的真正含义.你可能能够重复使用一些GNUstep,但是......老实说,我对此表示怀疑.听起来像是很多工作.

所以,是的,我认为这是可能的.这也是很多工作,我认为这不值得.

鉴于你所说的,如果我尝试这样做,我很想在C中编写尽可能多的核心逻辑,然后为每个平台用两个独立的GUI包装它.

  • 这正在成为我在C,视图/控制器中最合适的平台语言/库中的新模型(以及任何服务/库/共享代码). (4认同)