概述

  • Objective-C诞生于 20 世纪 80 年代,由Brad Cox 发明,意在将流行的、可移植的 C 语言与优雅的 Smalltalk 语言结合在一起。Objective-C 是 C 语言的一个扩展集,它以 C 语言为基础,在语言中添加了一些微妙但意义重大的特性。

  • 苹果公司的iPhone平台采用Objective-C做为native language的开发,Objective-C的内核是C语言的,并基于C语言实现OOP的一些特性。

Objective-C常用语法

减号(或者加号)

  • 减号表示一个函数、或者方法、或者消息的开始。
  • 在Objective-C里面没有public和private的概念,可以认为全是public。
  • 而用加号的意思就是其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例。

中括号

  • 中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。

NS****

  • 老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。
  • 这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如:NSLog,NSString等等。

函数多参数写法

  • 一个方法可以包含多个参数,不过后面的参数都要写名字。
  • (方法的数据类型) 函数名: (参数1数据类型) 参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …
  • 例如:

  • 实现这个函数的时候:

  • 调用的时候:

id

  • 在Objective-C里,一切东西都是指针形式保存,你获取到的就是这个对象在内存的位置。那么id就是你知道这个位置,但是不知道里面是啥的时候的写法。

Accessors(Getter & Setter)

  • 在Objective-C里面所有的实例对象默认都是私有的。所有在大多数情况下我们需要用accessors去读取或者设置变量的值。有两个语法都支持这样的操作,这个是传统的老的语法:

  • 第二行的代码其实并非直接去读对象实例的变量。事实上它调用的是名叫caption的方法。在Objective-C里大多数情况下我们不需要给getters加get的前缀。无论什么时候我们见到方括号,其实我们都是向一个对象或者一个类发送了一个消息。

Categories

  • Categories是Objective-C里面最常用到的功能之一。基本上category可以让我们给已经存在的类增加方法,而不需要增加一个子类。而且不需要知道它内部具体的实现。
  • 如果我们想增加某个framework自带的类的方法,这非常有效。如果我们想在我们程序工程的NSString能够增加一个方法,我们就可以使用category。甚至都不需要自己实现一个NSString的子类。
  • 比如,我们想在NSString里面增加一个方法来判断它是否是一个URL,那我们就可以这么做:

  • 这跟类的定义非常类似。区别就是category没有父类, 而且在括号里面要有category的名字。名字可以随便取,但是习惯叫法会让人比较明白category里面有些什么功能的方法。这里是具体的实现。但是要注意,这本身并不是一个判断URL很好的实现。我们主要是为了整体的了解category的概念。

  • 现在我们可以在任何的NSString类对象里都可以调用这个方法了。下面的代码在console里面打印的”string1 is a URL”:

  • 跟子类不一样,category不能增加成员变量。我们还可以用category来重写类原先的存在的方法,但是这需要非常非常小心。 记住,当我们通过category来修改一个类的时候,它对应用程序里的这个类所有对象都起作用。

总结

  • Objective-C还是比较好上手的。没有特别的语法需要去学习。而且一些概念在Objective-C里面被反复运用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注