OC中并没有像Java或者其他语言中提供的私有方法,OC中的私有,可以理解为相对私有。
OC中私有方法实现有两种方式:
1)方法在.m中实现,不在.h中声明(相对私有) 创建一个类: [cpp] view plaincopy
- #import<Foundation/Foundation.h>
- @interface Person : NSObject
- {
- int _age;
- NSString *_name;
-
- }
- -(void)run;
- -(void)eat;
- @end
实现这个类:
[cpp] view plaincopy
- #import"Person.h"
- @implementation Person
- -(void)run{
- NSLog(@"人正在走");//可以访问m
- }
- -(void)eat{
- NSLog(@"吃的方法");
- }
- -void()test{
- NSLog(@"我是私有方法");
- }
- @end
在main中测试:
[cpp] view plaincopy
- #import <Foundation/Foundation.h>
- #import "Person.h"
- int main(int argc, constchar * argv[]) {
- @autoreleasepool {
- Person *per=[Person new];
- [per eat]; //可以使用
- [per run]; //可以使用
- [per test]; //不可以使用
- }
- return 0;
- }
这时候编译器报错,因为test()是私有方法,此文件包含的是#import"Person.h",.h文件可以看做是对外的一个接口,而Person.h中没有声明定义test。当然这个test()也不能被子类继承和使用。那么这个test怎么使用呢?看下面代码: [cpp] view plaincopy
- #import"Person.h"
- @implementation Person
- -(void)run{
- NSLog(@"人正在走,速度是%d",m);//可以访问m
- }
- -(void)eat{
- NSLog(@"m=%d",m);
- [self test];//可以在本文件的函数中使用
- }
- -void()test{
- NSLog(@"我是私有方法");
- }
- @end
也就是说,test只能在本文件中被调用,跟static修饰函数的使用方法很类似。
2)通过匿名类别(延展)实现私有(一般意义上的私有)
[cpp] view plaincopy
- @interface MyClass {
- // 添加变量
- }
- - (void)PublicMethod;//公共方法,可以被继承类继承
- @end
而在类的.m文件中,采用类别来实现私有方法,具体操作为:
[cpp] view plaincopy
- @interface MyClass()//注意(),即定义一个空类别
- - (void)PrivateMethod;//在类别中定义私有方法
- @end
关于通过匿名类别实现私有方法目前还没有学到,暂时不做过多说明。
|