Separate Interface and Implementation Files
即头文件与源代码文件分开,这一风格C++也有。
在Objective-C中声明一般写在.h文件中,而定义写在.m文件中。
同样包含头文件的可以是<>也可以是””,这一点完全和C++是一样的,前者首先在系统头文件中搜索,后者在用户头文件中搜索。
类中的@implementation部分包含的是类的私有信息,这包括类的成员变量和类的实现代码。
Synthesized Accessor Methods
Objective-C中有专门的属性一说,即,通过@porperty标识的实例变量,它位于类的@interface中,如下图所示:
一旦你这样做了就无需另在@implementation中再次声明实例变量了。
然后在类的@implementation中用@synthesize来对@property中的变量加以限定就可以让XCode自动产生出它们的存取器(getter和setter)。如下图所示:
其实你不写@synthesize部分也能让编译器自动产生存取器,只不过这样产生的存取器名字前面有个下划线。
我在想这样编译器自动产生存取器会不会造成数据的不安全,当然你可以选择不写@property部分。
Accessing Properties Using the Dot Operator
所以可以看出在Objective-C类中的实例成员通常被称作属性。
想获取某属性成员的值,你可以以以下方式写出来:
如果用存取器的话,你可以如下写出来:
这个其实就是getter的变种,同样,也有setter的变种,如下所示:
这个你也可以写成非存取器的方式:
普通的方法你也可以点出来,如下图所示:
但是不推荐这样写,因为这种写法是存取属性专用,这种风格可以让你的代码泾渭分明。
Multiple Arguments to Methods
Objective-C中的多参数的方法的声明式很奇怪,如下所示:
它这个方法的名字不只一个,除了一个setTo还有一个over,然后每个名字后面跟了一份冒号,冒号后面是形参的类型和名称。可以看出有多少个冒号就有多少个形参。这种形式的方法可以简写成setTo:over:它的实现如下所示:
它的使用方式如下所示:
Methods without Argument Names
上述这种写法是可选的,因为整个方法名变成了一条消息语句,而不是单单一个名词而已,这样可读性比较强,不过我个人不太习惯,Objective-C允许你按下面这种方式写:
这种方法的调用方式如下所示:
像这样的方法可以简单写成set::以表示它有两个参数。
Local Variables
未被初始化的对象默认会被初始化为nil。
Method Arguments
有关函数传参,针对于内置类型而言,这个参数传递机制是值传递。
而对于对象而言则是传递引用。
The static Keyword
static变量没有必要初始化,因为它默认就是0。
The self Keyword
这是Objective-C中的新关键字,它的作用有点像this指针,即,对象实例自身。
你可以用它引用该实例自身的方法,这个方法被称为消息的接收方。
用法如下:
实例如下:
Allocating and Returning Objects from Methods
和C++语言不同,Objective-C中的函数返回对象时该对象并不是一个临时对象,而C++在返回对象时是返回一个临时对象,当这个临时对象被赋给目标左值对象后就被销毁。
Objective-C中函数返回对象时其实是把该对象的存储地址返回给了目标左值对象,更确切地说是个指针,这个行为有点像C++中的右值引用。