Objective-C的初学者指导part1

原文章地址:http://blog.teamtreehouse.com/the-beginners-guide-to-objective-c-language-and-variables
原文章标题:The Beginner’s Guide to Objective-C 作者:Ben Jakuben
参与翻译: Dawn.L
最近在学iOS后来看到了这个系列的文章,感觉挺有帮助,希望分享给大家!
PS.受水平和时间限制(每天空闲时间极少..),部分翻译可能不是很恰当,希望大家指正!

第一部分

Language and Variables 语言和变量

我的Objective-c编程语言经历,你们听起来会很熟悉,我成长的世界里充满了各种点号,分号,大括号,在编程的世界里,类似javascript,java,C#以及其他很多语言都在使用这些符号。我想:“Objective-C不可能那样难”.然后当我看到了我的第一个Objective-C代码时我想, “这是什么乱七八糟的(hot mess)” “为什么有这么多的方括号”好吧,让我们返回正题.
剧透一下下:学习Objective-C语言并不难(我生来就很爱它).这是用来为iPhone和iPad编写应用程序(app)的主要的编程语言,这个语言有着难以置信的灵活和强大而且它和其他的流行编程语言在很多方面其实是相类似的.
语言排行
来源:
TIOBE Programming Community Index for
2013年8月http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

尽管我开始是恐惧的,我还是尝试自己读了一些文档,看了一些代码,然后问一些厉害的人很逗比的问题.让我想起来一个很容易忘记的有启迪性的观点: 语言不是最重要的 .在编程里,我们使用的语言仅仅是语法,和我们想如何控制电脑的细节.而我们实际上在操作的概念是:循环条件,使用变量等等…对任何语言来说都是一样的.当我们学习不同的语言的时候,我们仅仅需要去学我们操作电脑的需要的具体文字和符号就好了,抛开这些不谈,Objective-C也是一个首先去学习的很棒的语言.在下面的内容里你将会找到为iOS开发作为指导的Object-C学习指南,这些可以帮助你去学习如何在Objective-C中编程,或者如果你已经知道了一些其他的语言可以将这些内容作为一些快速参考.

Objective-C编程语言

顾名思义,Objective-C是添加了大量面向对象特性的基于C语言的编程语言,这个语言最早是在20实际80年代被开发出来的,但是直到iOS的崛起才开始流行开来.让我们列举一些关于Objective-C的常见的问题和让人震惊的地方.

C? C++? C#? 有什么不同?

Object-C不是从C语言派生出来的唯一流行的语言,首先流行的是C++,一开始被命名为”带有类的C语言” 这个主意赋予了C语言 类和面向对象 的特征,正是由于C语言和面向对象的强大结合,C++语言变得流行开来.C#是被微软公司设计出来用来取代C++并沿着面向对象的道路走的更远的.一开始,它的确很像十分流行的Java语言,尽管它们有着几乎相同的核心语法,但它们也是各有各的特点.有件好事就是所有从C语言派生出来的语言中大量的基础语法是相同的.变量通常在相同的格式下声明和被使用,而且关键字和符号通常也是重复的.

“面向对象” 到底是什么?

借用my post about Java for Android里的一段文章:

一个面向对象的语言是建立在对象这个概念周围的.在现实的世界,我们环视一下屋子便可以把每一件物品当做是一个对象.举个例子,现在在我的桌子上有一个马克杯.把它作为对象,它的名字是马克杯然后它有它的属性:颜色,能盛放多少液体.面向对象的语言允许我们像马克杯这样设置它们的属性来在我们的代码中定义对象.我们也可以给对象发送消息,对于马克杯来说,我可能想知道它是否是空的?
我们接着可以创造和操作所有种类的对象在我们的app中去做不同的事情.举个例子,我们能够用”相机”这个对象去拍摄一个照片.这个相机对象代表iPHONE上的物理相机,但是在某种情况下我们能够在代码中与之交互.

马克杯子
这个马克杯将会返回给我 “还没喝完!”消息.

这些方括号都是些什么?这些代码怎么看起来像垃圾一样乱七八糟的.

Objective-C 维持了C语言所有的语法和特性,也添加了面向对象的特征.因此在我们之前的闲聊的模型中,我们可以用下面的方式来给对象发送消息(更多关于发送消息的内容之后会有更多解释):

 mug makeEmpty

(发送makeEmpty 消息到mug对象) 在Objective-C中 我们用方括号括住它来执行这个行为:

[mug makeEmpty]

这样乍看起来像是一个随意括住东西的括号,但是随着练习时间的增加, 围绕着面向对象的概念,给C语言代码加上薄薄的一层,这样一个组织代码的机制就能讲得通了.

C语言 + 方括号里面写你想做的事情 = Objective-C!

好的,但是我不想去管理我的内存!

你不用非得去管理.在iOS4.0中,苹果公司介绍了一个ARC(自动引用计数器)概念,这将会带走我们在Objective-C编程时管理内存的乏味的痛.在老版本的iOS代码中你会看到很多 retainrelease 信息被传到对象,但是在使用ARC的程序里,这些信息则被编译器自动处理了.代码看起来可能有点像你在那些可以自动管理内存的语言中找到的那些代码,比如Java.但是如果你希望程序更有效和更流畅地运行,同时避免app冲突,理解在一个iOS程序中,内存是如何分配,使用和释放的仍然很重要.更多关于Objective-C中内存管理的细节,在这里 iOS Foundations stage about ARC(原链接找不到了).

Objective-C编程语言的成分

让我们谈谈代码自身.在最原本的层次上来说,编程实际上就是操作数据.有很多类型的数据.我们需要使用从简单的数字或是/非值,到更复杂的东西比如为一个游戏准备的图片或媒体信息这些广泛的错综复杂的数据.
基本数据类型

一些我们在Object-C中常用的数据类型包括:
• int – 整型, 意思就是包括0和负数在内的所有整数(不包括小数).

• float – 浮点型,包含了很多放小数点的地方. 而且小数部分会变化或者浮动, 你需要知道这些值可能是不固定的,这点很重要. 当需要确定的小数部分时, 比如货币, 我们需要使用 NSDecimalNumber 这个数据类型.

• BOOL – “boolean”的缩写, 这是1个字节的 “true” 或者 “false”值 . C语言(包括Objective-C) 把 0 作为 “false” 把1 作为 “true”. 正如此 ,下面的关键字可以用来代表 true/false 值: YES/NO, TRUE/FALSE, true/false, 1/0. • char – 简单字符, 比如字母A 或者符号 “#”. 注意小写和大写的字符是不一样的, 所以 “a” 和“A” 是不同的两个字符.

• NSNumber – 这个类是一个轻量级的 “封装” 类 ,对上面提到的数据类型提供面向对象的特性.

上面列出的4种数据类型int, float, BOOL, 和 char, 是纯量(无对象)数据类型,意味着这些数据类型是相当简单和直接的.正如它没有对象数据类型那样先进,用单词”原始的(primitive)”来描述这种类型的数据(原始数据类型),其他的纯量数据类型包括short, double, 和 long.更多关于Objective-C基本数据类型的信息,在这 Objective-C 2.0 Data Types.

NSStringNSNumber 都是由大写字母开头的因为它们是更复杂的数据类型.它们是对象,Objective-C中的命名习俗是对象的名字应该由大写字母开头.对象比原始数据类型更复杂因为它有更复杂的属性和方法供使用,然而原始数据类型是受限的直接的.举个例子,我们能发送一个叫做length 的消息给NSString对象,然后NSString将会告诉我们有多少特征在文本中.int数据类型不会回应任何消息.你也许也想知道为什么NSStringNSNumber 开始字母是”NS”而不是直接被命名为String and Number.对象是在类文件中被定义的(更多参见第二部分),所有的类在被Objective-C调用时都加载到相同的地方,这意味着相同名字的类会造成问题.为了尽力避免这样的问题,Objective-C采取了为类名增加两个或三个前缀来指明它的来源的约定.”NS”来自”NeXSTEP”电脑公司,这个公司是乔布斯在被苹果公司开除后创建的.

变量

在编程中,变量是用来盛放数据的容器,数据本身能是简单的数字或者一首歌的歌词和元数据.当我们在Objective-C中创建了一个变量时,我们通常会指定这个变量所盛放的数据类型.这就是静态地输入数据,电脑中的内存块会被分配作为容器去盛放数据,然后我们用我们自己提供的名称来储存那个容器的引用.”静态输入”意味着每一个变量(或者容器)盛放的数据类型已经提前声明了.举个例子来说,如果一个变量是用来盛放一个数字的,我们需要去说一下,然后我们就不能被允许把其他东西比如字母放在里面.静态输入的变量将会在程序运行之前被检查,如果我们忘记去声明数据的类型或者声明错误,将会报错.好,让我们最后来看一些代码,这是一个声明标量并且给它赋值的例子:

int

上面的这黑色块是声明favoritenumber变量(盛放了int数据)的叙述,然后给这个变量赋值24.本质来说,这段代码的意思是讲24这个值放入了名字叫做favorite的容器中.之后我们便可以再代码中使用容器的名字来调用我们放到其中的数据.

1.变量声明中的第一个单词是数据类型,这个单词告诉我们变量中将要存放什么类型的数据.

2.第二个单词是变量的名字,名字你可以取任何名字但是请遵守一定的约定习俗.变量名字必须不能包括任何空格或者特殊字符;只能由字母,数字和下划线组成,而且不能由数字开头.

3.等号(=)是一个操作符,意味着能够为我们执行特殊的操作.这是赋值操作,意味着我们能够使用它给变量赋值.在这个例子中,它将右边的(4)integer类型的值赋值给左边的(2)favoritenumber变量.

4.绿颜色的数字是我们要处理的,int类型的数字是不带小数的整数或者负数,就像本例子.

5.最后一个字符是分号,是我们用来结束声明的.Objective-C中的分号就像句子里的最后:我们用它来声明我们说完了什么事情.Objective-C中的每一个声明必须用一个分号来结束(请注意,一个声明可能为了更好的可读性而在多行显示).

当有对象变量时,事情就变得更复杂了:

nNSString

这个1-5部分和上面的是相同的,这里面的数据是文本(被双引号包围的);
A.星号(*)会复杂一些,这不是变量名字的一部分.它可以放在数据类型和变量名字之间的任何位置,所以下面的这些都是相等的:

NSString* title;
NSString * title; 
NSString *title;

()符号实际上是用来引用一个指针的操作符,什么引用什么啊?指针就是它们听起来的那样.它们指向内存中实际数据存放的位置.那个内存中的位置是用来存放数据的实际容器.指针是常规的C语言中的一部分,它之所以被使用是因为它们更有效率.当我们在我们的程序中使用指针时,我们仅仅需要去储存和复制一个指针,这个指针只是内存中一个空间地址.是一个相对小的数据块.如果我们没有存储和复制被指向的数据,那可能很快陷入没有足够内存空间的问题.举个例子,用指针指向一个大的视频文件然后在代码中多次使用那个指针比每次在代码中调用时都载入全部的大视频文件更有效率. 返回星号(),它引用一个指针是什么意思?意思是我们获得了指针指向的存储在内存中的值.

B. (@)符号加上双引号里的文本组成了”NSString文字”,作为首先在其他编程语言中使用Strings的人,这曾经让我很困惑.@符号在Object-C中在一小部分地方被使用,这是一个指明它是Objective-C的一部分而不是C语言的一部分.当计算机编译Objective-C代码时,这是很重要的.NSString对象和C语言中的是不同的,这就是为什么@符号出现在第一个双引号之前.

最后一个事情:静态VS动态类型

记得之前当我们谈到作为静态类型语言的Objective-C语言的时候,意思是,”每一个变量(或者容器)存放的数据类型都是提前声明的?”当然,那是正确的一种方式,但是不能代表着全部.我不想在这文章中谈论过多关于语言的细节,但是我要提及Objective-C语言也是一个动态语言.这意味着当我们的app运行时(当它们已经被完全编译完成),我们代码的一些部分是可以扩展和修改的.一个例子就是使用名字是id的通用数据类型,id可以被用来代表各种类型的数据.这是指定数据的最通用的格式.这是代表用来引用数据的识别符.这种动态类型允许我们在iOS中更加灵活的编程.我们经常看到id用在那些绑在控制屏幕的方法中,像这样:

- (IBAction)save:(id)sender;

这是方法的声明,我们将会在将来的文章中谈到它.注意senderid的参数 . 这允许我们app不关心的一些灵活性,如果sender是一个按钮或者图片或者无论什么其他我们可能想它来触发这个动作.

敬请期待 PART 2

类, 消息/方法/函数, 条件语句, 循环语句!

By Dawn.L

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值