从PHP到Objective-C [关闭]
-
03-07-2019 - |
题
作为一名经验丰富的PHP开发人员,并且对C(使用16位我爸爸的NEC微控制器进行分布式计算实验)有了一个公平的知识,我想转向Objective-C和Cocoa,最终目标是将Mac / iPhone应用程序与我的一些PHP项目集成。
通过“适用于Mac OS X的Cocoa编程”由Arron Hiilegass写的,我有点沮丧。我能够处理这些例子,但他并没有完全解释为什么他正在以这种方式使用类(例如,NSNumber而不是int或double)。
我正在寻找一本优秀的书籍,以便首先使用Objective-C。我的问题是,什么是好书?我在看“在Objective-C 2.0中编程”。它看起来很不错。我从哪里去?我想我应该重新开始我的Cocoa书。
此外,互联网上是否有任何资源可以帮助从PHP过渡到Objective-C?我知道PHP是一种松散类型的脚本语言,因此它有其不同之处。对于Obj-C和Cocoa,有些事情没有意义,为什么我不能将整数放入NSMutableArray?
反正。谢谢您的帮助! (我只有14岁,所以如果我在我的Q中犯了任何错误,请继续对我说。)
解决方案
我刚刚完成了“在Objective-C 2.0中编程”。我自己,这很不错。我推荐它,特别是如果你从未使用过C(或者如果你忘了它,就像我一样)。
然而,Apple确实拥有出色的文档。如果你不介意在线阅读,我会从他们的 Cocoa入门页面。
其他提示
我能够处理这些例子,但他没有解释为什么他以这种方式使用类(例如NSNumber而不是int或double)......
对于Obj-C和Cocoa,有些事情没有意义,为什么我不能将整数放入NSMutableArray?
NSNumber
比基本类型(如 int
或 double
)更有用,因为它经常被使用与您在Cocoa中编程时遇到的其他对象一起使用。
例如,为了将数字作为值打包到可调整大小的数组(如 NSMutableArray
)或关联数组( NSDictionary
),您需要将数字原语( int
, double
等)转换为 serializable ,or archivable object—一个 NSNumber
。
NSNumber
不同,基元不能被序列化,因为基元不在“核心基础”的基本集合中。 Apple努力为您提供的类型( NSNumber
, NSArray
, NSString
等)。
此外,通过使用 NSNumber
,您还可以免费获得许多奖励便利方法:您可以快速将数字转换为字符串,例如,只需输入 [myNumber stringValue] 代码>
或者,如果您将 NSNumber
视为某物的价格(“$ 1.23”),则可以应用 NSNumberFormatter
确保对数字的操作给出具有您期望的格式的结果(例如,如果您添加两个价格值,您将期望得到货币值作为回报)。
这并不是说你不能或不应该使用 int
或 double
变量。但在许多情况下,您会发现 NSNumber
是一个更好的选择,因为您可以编写更少的代码并获得“免费”的许多功能。
根据我的经验,我发现互联网文档对于学习Obj-C和CocoaTouch非常有帮助。我的进展是这样的:
1)在iTunes上观看Apple Dev视频(它们是免费的)。
2)阅读使用入门, “iPhone应用程序编程指南”。
3)阅读 OOP in Obj -C 。
4)阅读更多内容: Cocoa基础知识, Objective-C入门, Cocoa Practices
5)做一些简单的教程。
IMO:您需要的所有信息都在Apple Dev:iPhone网站上。省钱,不买书。如果您不理解“为什么”在其中一个指南或教程中完成某些操作,立即与Google的其他来源交叉引用。
你必须记住,学习曲线在这里非常大。这对我来说,我每天都在大学里学习这样的事情。所以,坚持下去并以聪明的方式阅读(你知道的浏览内容)。我自己看到的是,如果我了解iPhone的工作方式并了解数据流,那么对它进行编程主要是语法问题。
PHP与Objective-C非常不同。此外,在因特网环境中用PHP解决编程问题的方式与在iPhone环境中在Obj-C中解决编程问题的方式有很大不同。因此,您希望从新的角度来看待iPhone,并作为学生/学习者。花点时间专注于面向对象的编程和最佳实践。这将在未来几年祝福你。
-Buffalo
另外,回答你的问题:
Objective-C是一种面向对象的语言,作为C语言的扩展而构建。
因此它提供了原始类型(如int和double)和对象。
NSNumber是一个Objective-C类,它表示一个数字PLUS对该数字(方法)的许多操作。使用NSNumber而不是数字基元类型的优点是它可以以面向对象的方式使用(您可以向其发送消息,您可以使用“协议”扩展其功能,您可以继承它,您可以在一个期望对象等的方法中传递它。
对于NSMutableArray,这是一个提供类似数组功能的类。它被设计为使用Objective-C对象类型(它是NSObject类型对象的容器和从它们继承的对象),这就是它不能包含整数的原因。但是,它可以包含一个NSInteger,它是一个表示整数的Objective-C类。
我个人会尝试首先从 http://的苹果参考文献中学习Objective-C developer.apple.com/library/mac/navigation/ 并从那里继续发布可可。
我在类似的船上(PHP转向Objective-C),我发现最好的过程是跳进一个项目。我也阅读了Hillegass的书,这是一个很好的开始,但了解一种语言的唯一方法就是让目标明确。
这很痛苦但是有效。咖啡,原料药和面巾纸。
编辑:我刚读完你帖子的最后一部分,看到你是14岁。也许用可口可乐换咖啡:)如果你来自任何地方,我最喜欢的Objective-C教程是来自斯坦福大学iOS编程的iTunesU课程。教授真的从其他书籍和在线教程中把事情放在眼里。