书接前文,奇怪的语法体验继续!
对象的初始化
和Java的new运算符不同,OC的对象初始化使用初始化方法(initializer),个人觉得比new运算符更酷,这方法名和C语言中动态分配内存空间的malloc很像。
实例的生成:
[ClassName alloc]
Cocoa中某个类的对象的生成:
[[ClassName alloc] init ]
通常嵌套调用alloc和init来生成对象。
初始化方法并不具备该对象的重置功能,需单独使用reset方法。
类的定义
和Java类似,OC中类的定义和实现可以分离,即类本身和对外的接口(我是这么理解的)。
接口声明
类的接口部分定义类的实例变量和方法,通常声明为头文件。给需要调用这个类的模块引用。
接口的声明eg:
@interface ClassName : SuperClassName
{
id value1;
int value2;
double value3;
BOOL value4;
}
- (id)method1: (id)obj;
- (void)dealloc;
- (double)method2: (int)someone;
@end
所有的OC编译指令(compiler directive)都以“@”开头,和C语言的字符串区分。类的接口声明使用@interface和@end包起来,@end后不接分号。
接口声明,必须写父类。
类的实现
类的实现部分不用再次声明父类。
实现部分则是上述接口声明中所有方法的实现。方法内部可以自由使用实例变量。方法内部定义的局部变量和C语言的局部变量同理。若局部变量和实例变量重名,则实例变量将被覆盖,方法的参数名同理。方法中的“self”即实例本身,相当于Java的“this”。