[翻译] 如何学习Cocoa

[文章原地址]
http://funwithobjc.tumblr.com/
个人翻译,难免会有错误,请各位看官海涵,翻译在末尾
本人将在文章的部分地方添加注释,并根据需求增减文章内容,在此对原作者辛勤劳作表示感谢 

How to learn Cocoa

This is something any experienced Cocoa developer has been asked at least half a dozen times:

"What’s the best way to learn Objective-C/Cocoa?"

I have two answers to this question:

  1. Be curious
  2. Don’t be satisfied

Be Curious

Curiosity is the heart of learning anything. If you can cultivate a deep curiosity about the Objective-C language and the Cocoa frameworks, then I guarantee that you will have absolutely no problem learning them. I’m not talking about the “oh, wouldn’t it be nice to know how to write iOS apps” kind of curiosity. I’m talking about the “why does the @ sign go there? What’s up with these asterisks all over the place? Why are things done in this order instead of that order” kind of curiosity. Gaining this level of curiosity can be very difficult, especially at first. But without it, you’ll never really understand how everything is working together.

If you’re familiar with an sort of object-oriented programming language, then Objective-C, as a language, shouldn’t be that hard to pick up. Just use get used to the square brackets, and things will look pretty familiar. Learning the frameworks, on the other hand, will take a lifetime. The Cocoa Frameworks (Foundation, AppKit/UIKit, CoreData, CoreFoundation, MapKit, QuickLook, MediaAccess, CoreLocation, etc) are enormously broad. The Foundation framework itself is composed of 173 public classes and 31 protocols. That’s a lot of pre-built code, and that’s just one framework out of a couple dozen! There are some classes you will come to know very intimately (NSStringNSArray,NSDictionary), but even they will surprise you every now and then. Plus, Apple actively develops these frameworks; they’re being improved and optimized and expanded all the time. There will always be more to learn.

Along with the capabilities of the classes, there are patterns to learn. Design patterns describe how classes interact with each other. Some of the first ones you’ll encounter are Model View ControllerDelegation, and Class Clusters. There are many others, and they’re in there for a very good reason. As you come across them, take the time to understand why they’re there.

Do the same with the classes in the frameworks. Explore them. Play with them. Abuse them. Ask yourself:

  • What problem does this solve?
  • How does it solve the problem?
  • Can you use these abilities for anything else?
  • How would you implement this class if you had to? (And then go do it!)

Be curious.

Don’t Be Satisfied

As you learn Cocoa, the code you write will be terrible. Understand that. But don’t accept it. There is always a different way you could do something, and quite often one of those different ways is a better way. Always seek out opportunities to improve your code and to find different and better ways to organize it. Sometimes this will mean rewriting things half a dozen times. But you know what? That’s OK! All developers experience this. If you can learn to not be satisfied with your code, you’ll quickly learn how to iterate over it and make improvements here, tweak some stuff there, maybe rip out some layer of control and totally reorganize it… This is what programming is all about. Don’t be satisfied with how your code looks. Strive to make it a work of art and a thing of beauty.

Final Thoughts

So there you have it! These are my recommendations for how to learn Cocoa. They have served me well, and I think they pretty much summarize what I’ve observed about experienced developers.

Oh, and by the way…

  1. Know what a pointer is.
  2. Memorize the memory management rules.
  3. Never invoke -retainCount.

Welcome to Cocoa.

 

如何学习Cocoa

这是任何一个牛逼的Cocoa开发者被问了无数次的一个问题:

"有什么最好的方法来学习Object-C/Cocoa?"

对于这个问题,我有两项建议

1.保持好奇

2.不要轻易满足

保持好奇

学习任何事物好奇心都是最好使的.如果你能对Objective-C和Cocoa的框架有着浓厚的兴趣,我敢肯定,你学习它绝对没有一点问题.我不会说"这么编写IOS的程序是不是很酷?"之类,我会说"为什么标示符@放在这里?为什么星号放在那里?为什么事情必须这样做而不能那么做"之类的,达到如此程度的好奇心非常难,尤其是刚开始.但是,如果没有好奇心,你不会真正的懂得那些玩意是怎么运作的.

如果你熟悉一种面向对象的编程语言,那么,Objective-C,作为一种新的语言,学习它不会很难.仅仅需要熟悉方括号的调用函数的方法,那么,他们看起来就会非常类似.学习这些框架,从某种角度上来说,将会耗费很长时间.这个Cocoa的一些框架(Foundation,AppKit/UIKit,CoreData,CoreFoundation,MapKit,QuickLook,MediaAccess,CoreLocation,之类的)内容是非常多的.Foundation框架本身就包含了173个类和31个协议.那些还是预先编译过的代码,仅仅是那一打鸡蛋中的一枚-_-!还有一些类(NSString,NSArray,NSDictionary),现在你可能会感到惊奇,但在将来你将会非常之熟悉.进一步讲,苹果一直活跃于开发这些框架,这些框架一直都在完善.扩展以及优化,所以,需要一直的学习他们.

面对这无数的类,是存在着一种学习模式的.设计模式描述了类与类之间是如何产生联系的.你第一次会遇到的一些设计模式有MVC.代理和类集群(我不知道怎么翻译,没接触过).实际上还有很多其他的设计模式,存在即合理,当你遇到它的时候,多花些时间与它熟悉熟悉吧.

也请你对框架中的类做着同样的事情,探索它们,试着用它们,虐它们,问下你自己:

这个类能解决什么问题?

它如何解决了这个问题?

你能用它们干些别的吗?

在不得不重写类的情况下,怎样去实现这个类?(想好了就去做吧)

保持好奇心.

不要轻易满足

当你学习Cocoa时,开始时你的代码将会很烂,要懂得这个道理,但不要满足于它.你经常可以尝试些别的,且常常能够找到更好的方法.找机会优化你的代码,找不同的和更好的方式来重写它们.有时候,这意味着重写无数遍,但是你知道吗?就应该这样啊.所有的开发人员都会经历这个过程.如果你学会了不轻易满足,你将很快的认识到一遍又一遍的去重写它而得到进步,在这里用尽全力,也许就能一层一层的撕开秘密并最终完全弄懂它...编程就是这档子事.不要满足于你自己写的代码,尽力把他当做一门艺术来做,去体会它的美感.

最后的思考

就这些了!就是我关于学习Cocoa的建议.它们对我很受用,我想,这就是我总结出的牛逼开发者的经验了吧.

哦,顺便提提...

1.要知道什么叫指针

2.记住内存管理规则

3.永远也不要尝试判断retainCount值(来确定一个对象有没有释放掉)

欢迎来到Cocoa的世界

时间: 2024-11-08 18:13:55

[翻译] 如何学习Cocoa的相关文章

杰升信息科技CEO黄灼: 机智云的定位就是成为不同标准之间的翻译

摘要: 重点提示 目前这个产业还处在早期阶段,这些智能硬件产品所搜集的数据无论还在可靠性还是在规模上,距离提供大规模落地的服务还有距离.当下最关键的问题是将智能硬件普及起来 重点提示 目前这个产业还处在早期阶段,这些智能硬件产品所搜集的数据无论还在可靠性还是在规模上,距离提供大规模落地的服务还有距离.当下最关键的问题是将智能硬件普及起来,这也是目前机智云的方向,不仅将现有产品智能化,还能孵化出更多的新创智能产品. 三星提出Smart Home,LG有Home Chat,海尔力推U+,谷歌以32亿

[译] 原生 iOS(Swift) 和 React-Native 的性能比较

本文讲的是[译] 原生 iOS(Swift) 和 React-Native 的性能比较, 原文地址:Comparing the Performance between Native iOS (Swift) and React-Native 原文作者:John A. Calderaio 译文出自:掘金翻译计划 译者:Deepmissea 校对者:gy134340,Danny1451 原生 iOS(Swift) 和 React-Native 的性能比较 React-Native 是一个混合的移动框架

CSS制作网页:为垂直三栏设置相同高度

css|网页 这篇文章本来是我自己翻译的学习资料,我认为这个方法不错,所以与大家分享. 在老公的帮助下学习WEB标准刚刚半个月,有些地方也许翻译的不太准确,如果有异议,请提出来,我会马上修改的.-------------------------------------------------------作者: Alan Pearce原文: Multi-Column Layouts Climb Out of the Box地址: http://alistapart.com/articles/mul

深度炼丹指北:从“入坑”到“放弃”

随着人工智能的火热,越来越多朋友想要进入深度学习领域,但是总会遇到一个问题:想要系统的入门,但是身边的资料铺天盖地,不知道该从哪里入手.因此,本文想通过自己的一些学习经历和平时收集的一些资料,为大家提供一个深度学习的炼丹清单,以期望帮助大家对深度学习有一个更详细而全面的学习. 一.数学篇 1.1 知识要点 1.1.1 线性代数 标量.向量.矩阵.张量.范数.特征分解.奇异值分解.距离 1.1.2 概率论 随机变量.概率分布.条件概率.贝叶斯公式.期望.方差.常见分布函数.Lagrange乘子法.

VBS基础教程

 VBScript(Microsoft Visual Basic Script Editon).,微软公司可视化BASIC脚本版). 正如其字面所透露的信息, VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言.  Microsoft Visual Basic是微软公司出品的一套可视化编程工具, 语法基于Basic. 脚本语言, 就是不编译成二进制文件, 直接由宿主(host)解释源代码并执行, 简单点说就是你写的程序不需要编译成.exe, 而是直接给用户发送.vbs

VBS基础编程教程 (第5篇)_vbs

第五篇(共六篇):         请允许我县描述一下我现在的环境:气温高达37摄氏度, 而我忘记了图书馆开门的时间, 还要在这里站上一个小时, 在热带植物的包裹下, 各种奇怪的小飞虫围着我转来转去. 不过令我欣慰的是, 终于写到五了, 还有两课我们的"基础篇"就要结束了.         今天我们来了解语言本身的最后一个论题:数组.  要理解"数组", 这个概念我觉得另一种翻译对学习来说更加容易:"阵列", 没错, 数组就是一个阵列, 一个数据

用.NET创建Windows服务的方法第1/2页_C#教程

译者说明:我是通过翻译来学习C#的,文中涉及到的有Visual Studio.NET有关操作,我都根据中文版的VS.NET显示信息来处理的,可以让大家不致有误解. 作者:Mark Strawmyer 我们将研究如何创建一个作为Windows服务的应用程序.内容包含什么是Windows服务,如何创建.安装和调试它们.会用到System.ServiceProcess.ServiceBase命名空间的类. 什么是Windows服务? Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器

MSN宣布推出必应词典桌面版

图为:必应词典桌面版主窗口 5月19日下午消息,MSN中国今天宣布推出必应词典桌面版(beta)和必应云词典,从而满足用户在不同使用场景中对英语学习和中英文互译的需求. 据悉,作为桌面端英语学习软件,必应词典桌面版不仅包含传统客户端词典的常用功能--中英文单词和短语查询等,还拥有词条对比.近音词搜索.词性百搭搜索等众多基于搜索的特色功能,并具备云端与本地词库查询双重搜索模式:必应云词典是必应词典的"云"服务模式,在部署了必应云词典的网页,用户无需安装词典桌面版,即可随时查看网页内容的地

VBS基础教程_vbs

VBScript(Microsoft Visual Basic Script Editon).,微软公司可视化BASIC脚本版). 正如其字面所透露的信息, VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言. Microsoft Visual Basic是微软公司出品的一套可视化编程工具, 语法基于Basic. 脚本语言, 就是不编译成二进制文件, 直接由宿主(host)解释源代码并执行, 简单点说就是你写的程序不需要编译成.exe, 而是直接给用户发送.vbs的源