如何在 MonoTouch 和 Objective-C 之间做出选择?

如何解决如何在 MonoTouch 和 Objective-C 之间做出选择?

我最近经常看到这个问题(及其变体)。令我惊讶的是,人们回复的频率很高,但回复的次数却 很少

我有我的偏好(我喜欢这两种堆栈),但这是大多数“答案”开始出错的地方。它不应该是关于我想要什么(或其他人想要什么)。

以下是我如何确定 MonoTouch 的价值 - 显然,我不能客观,但我认为这是非常狂热的:

  • 这是娱乐还是商务?如果你想进入这个领域的咨询,你可以很快赚回 399 美元。

  • 你想从内到外学习这个平台,还是“只是”想为它编写应用程序?

  • 您是否足够喜欢 .Net,以至于使用不同的开发堆栈会为您带来乐趣?同样,我喜欢这两种堆栈(Apple 和 Mono),但对我来说,MonoTouch 让体验变得更加有趣。我并没有停止使用 Apple 的工具,但这主要是因为我 真的很喜欢这两种堆栈 。我喜欢 iPhone,也喜欢 .Net。在那种情况下,对我来说,MonoTouch 是轻而易举的事。

  • 你觉得和 C 一起工作很舒服吗?我指的不是 Objective-C,而是 C——这很重要,因为 Objective-C C。它是一个不错的、花哨的、友好的 OO 版本,但是如果指针给你带来了 heebie-jeebies,那么 MonoTouch 就是你的朋友。如果碰巧您 喜欢指针(或 C 等),请不要听那些认为您是开发者的反对者。我过去常常带着一份 IBM ROM BIOS Pocket Reference 的副本四处走动,当我编写程序集并迫使我的计算机进入有趣的视频模式并为它们和(诚然垃圾)窗口系统编写我自己的字体渲染位时,我没有不要认为 QuickBasic 的开发者是坏蛋。我 一个 QuickBasic 开发人员(除了其余的)。永远不要屈服于书呆子的男子气概。如果你不喜欢 C,如果你不喜欢指针,如果你想尽可能远离手动内存管理(而且,公平地说,在 ObjC 中一点也不差),那么。 .. 单触。并且不要为此胡说八道。

  • 您想定位用户或企业吗?对我来说这并不重要,但仍然有人在 Edge 上,事实是:如果你使用 Apple 的堆栈,你可以创建一个更小的下载包。我一直在玩 MonoTouch,我有一个不错的小应用程序,一旦压缩,它会降到大约 2.7 MB(提交你的应用程序进行分发时,你压缩它 - 当应用程序从商店下载时,他们’重新压缩 - 因此,当确定您的应用程序是否会低于 10MB OTA 限制时,请先压缩傻瓜 - MonoTouch 会让您感到惊喜)。但是,除了 MT 的快乐之外,如果您的目标是最终用户,那么半兆与近 3(例如)对您来说可能很重要。如果您正在考虑企业工作,那么几 MB 根本无关紧要。和,需要明确的是——我将很快向商店提交一个基于 MT 的应用程序,我对大小没有任何问题。根本不打扰我。但如果这是值得关注的事情 ,那么 Apple 的堆栈赢了这个。

  • 做任何 XML 工作?单触。时期。

  • 字符串操作?日期操纵?我们已经习惯使用 .Net 的一切和厨房水槽框架的其他一百万个小东西?单触。

  • 网页服务?单触。

  • 从语法上讲,它们都有各自的优势。 Objective-C在你必须写它的地方 往往更冗长。您会发现自己使用 C# 编写代码,而不必使用 ObjC 编写代码,但它是双向的。这个特定的主题可以写满一本书。我更喜欢 C# 语法,但在克服了我最初对 Objective-C 的“这是超凡脱俗”的反应之后,我学会了享受它。我在谈话中取笑它(这对于习惯于 C#/Java/等的开发人员来说 奇怪),但事实是我心里有一个 Objective-C 形状的点让我很开心。

  • 你打算使用界面生成器吗?因为,即使在这个早期版本中,我发现自己用 IB 构建我的 UI 并在代码中使用它们的工作要少得多。感觉就像 Objective-C/IB 的做事方式缺少整个步骤,我很确定这是因为 Objective-C/IB 的做事方式缺少整个步骤。到目前为止,我认为我没有进行充分的测试,但 到目前为止 ,MonoTouch 是这里的赢家,因为你需要做的工作少得多。

  • 你认为学习新的语言和平台很有趣吗?如果是这样,iPhone 可以提供很多东西,Apple 的堆栈可能会让你走出舒适区——这对一些开发者来说很 有趣 (嗨——我是其中的开发者之一——我开玩笑说Apple 经历了一段艰难时期,但我通过 Apple 的工具学习 iPhone 开发获得了很多乐趣)。

有很多事情要考虑。价值是如此抽象。如果我们谈论成本以及它是否值得,答案归结为我的第一个要点:如果这是为了生意,如果你能得到工作,你就会马上赚回你的钱。

所以……这就是我所能做到的客观。这是您可能会问自己的简短列表,但这是一个起点。

就个人而言(让我们暂时放弃客观性),我喜欢并使用两者。我很高兴我首先了解了 Apple 堆栈。当我已经熟悉 Apple 的世界时,我更容易开始使用 MonoTouch。正如其他人所说,您仍将使用 CocoaTouch——它只是在一个 .Net 化的环境中。

但不止于此。没有使用过 MonoTouch 的人往往会停在那里——“这是一个包装器等等等等”——那不是 MonoTouch。

MonoTouch 让您可以访问 CocoaTouch 必须提供的功能,同时还可以让您访问 .Net 必须提供的(一个子集),一些人觉得更舒服的 IDE(我是其中之一),与 Interface Builder 更好的集成,虽然你不会完全忘记内存管理,但你有很大的余地。

如果您不确定,请获取 Apple 的堆栈(它是免费的),并获取 MonoTouch 评估堆栈(它是免费的)。在您加入 Apple 的开发计划之前,两者都只能在模拟器上运行,但这足以帮助您确定您是否更喜欢其中一个,以及 MonoTouch 对您而言是否值 399 美元。

不要听那些狂热者的话——他们往往是那些没有使用他们所反对的技术的人:)

解决方法

今天在当地的 .Net 活动中参加了有关 Mono 的会议后,MonoTouch 的使用被“触及”为 iPhone 开发的替代方案。在 C# 和 .Net
中非常舒服,这似乎是一个吸引人的选择,尽管 Mono 堆栈有些古怪。然而,由于 MonoTouch 的价格为 400 美元,我有点担心这是否是 iPhone
开发的方式。

任何人都有过使用 MonoTouch 和 Objective-C 开发的经验,如果有的话,使用 MonoTouch 进​​行开发是否比学习
Objective-C 更简单、更快捷,并且值 400 美元?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-