类
接口和实现
Objective-C的类分为接口定义和实现两个部分。接口定义(Interface)放在头文件中,文件扩展名是.h,实现(implementation)放在实现文件中,文件扩展名是.m(也有.mm的扩展名,表示Objective-C和C++混编的代码)。
接口定义也可以写在.m文件中,但最好不要这么干
需要注意的是,与Objective-C的interface概念最接近的是C和C++里的头文件,它与implementation是成双成对出现的,作用是声明类的成员变量和方法。它与Java的interface概念完全不同:
Objective-C里,interface有且只有一个实现,Java的interface可以有0-N个实现
Objective-C里,interface可以定义成员属性,Java里不可以
在Objective-C里,和Java的Interface概念相似的是Protocol,下文会讲到。 请看示例: Interface
@interface MyClass { int memberVar1; id memberVar2; }
-(return_type) instance_method1;
-(return_type) instance_method2: (int) p1;
-(return_type) instance_method3: (int) p1 andPar: (int) p2; @end
Implementation
@implementation MyClass { int memberVar3; }
-(return_type) instance_method1 { .... }
-(return_type) instance_method2: (int) p1 { .... }
-(return_type) instance_method3: (int) p1 andPar: (int) p2 { .... } @end
接口和实现以@interface、@implementation开头,都以@end结束。“@”符号在Objective-C中是个很神奇的符号。
冒号也是方法名的一部分,method和method:是两个不同的方法名,不是overload,第二个带参数。 上述代码对应的Java版:
public class MyClass { protected int memberVar1; protected pointer memberVar2; private int memberVar3;
public (return_type) instance_method1() { .... }
public (return_type) instance_method2(int p1) { .... }
public (return_type) instance_method3andPar(int p1, int p2) {
.... } }
私有方法和公开方法
写在.h头文件里的方法都是公开的,Objective-C里没有私有方法的概念(没有你说个蛋啊,哈哈哈哈)。
官方并没有提到Objective-C怎么实现私有方法,我查阅了stackoverflow,统一的答案是,要实现私有方法的效果只能借助Category,不过,根据我的测试,即使采用了Category,也不能阻止外部的代码调用这个“私有方法”,只是Xcode不支持“私有方法”的自动完成,并会有警告提示,运行的时候,还是会成功的。各位看官知道有这么回事就可以了 |
|