Objective-C中的延展(Extension)

标签: Objective-C
发布时间: 2014/8/8 15:30:28

简介

简单的说Objective-C中的匿名类目就是延展,在延展中定义的方法是类私有的方法只能在类的内部调用,定义延展的方式就是把类目中括号中得名字省略掉,括号保留这就是延展。其实在延展中定义的方法不是真正的私有方法和C++, Java中得方法还有所区别,在类初始化的文件中引入相应延展的头文件,其延展对应的方法也是可以访问的。是通过隐藏延展的头文件来达到方法私有的。

代码

定义私有方法有以下三种方式:

1.通过延展来实现方法的私有,延展的头文件独立。这种方法不能实现真正的方法私有,当在别的文件中引入延展的头文件,那么在这个文件中定义的类的对象就可以直接调用在延展中定义所谓私有的方法。demo如下:

代码如下:

延展相应的头文件,延展方法的实现在类对应的.m中给出实现方法:

 
#import "ExtensionTest.h"
 
@interface ExtensionTest ()
-(void)privateFunction1;
 
@end

2.第二种实现延展的方式是延展没有独立的头文件,在类的实现文件.m中声明和实现延展,这种方法可以很好的实现方法的私有,因为在OC中是不能引入.m的文件的

3.第三种实现方法私有的方式是在.m文件中得@implementation中直接实现在@interface中没有声明的方法,这样也可以很好的实现方法的私有。
Extension.m中的代码:

#import "ExtensionTest.h"
#import "ExtensionTest_Extension1.h"
//在实现方法里声明延展
@interface ExtensionTest()
-(void) privateFunction2;
@end
 
@implementation ExtensionTest
//实现各种方法
-(void)publicFunction
{
    NSLog(@"publicFunction PS:我是正儿八经的公用方法,我在.h中被声明,在.m中被实现");
    //调用各种私有方法
    [self privateFunction1];
    [self privateFunction2];
    [self privateFunction3];
     
}
//实现第一个私有方法(第一种实现类方法私有化的方法)
-(void)privateFunction1
{
    NSLog(@"PrivateFunction1 PS:我是在别的头文件中定义的延展,在.m中被实现");
}
 
//实现第二个私有方法(第二种实现类方法私有化的方法)
-(void)privateFunction2
{
    NSLog(@"PrivateFunction2 PS:我是在本文件中定义的延展,在本文件中进行实现!");
}
 
//在头文件中为声明的方法在.m中直接定义是私有的方法
-(void)privateFunction3
{
    NSLog(@"PrivateFunction3: 我是在实现方法中直接定义的方法,我也是私有变量");
}
end

在main函数里进行测试,如果在main函数里引入#import "ExtensionTest_Extension1.h"也可以调用其里面声明的相应的方法, 测试代码如下:

//测试延展
ExtensionTest *extension = [ExtensionTest new];
[extension publicFunction];
[extension privateFunction1];

运行结果:

2014-08-05 15:54:46.147 Memory[1683:303] publicFunction PS:我是正儿八经的公用方法,我在.h中被声明,在.m中被实现
2014-08-05 15:54:46.149 Memory[1683:303] PrivateFunction1 PS:我是在别的头文件中定义的延展,在.m中被实现
2014-08-05 15:54:46.149 Memory[1683:303] PrivateFunction2 PS:我是在本文件中定义的延展,在本文件中进行实现!
2014-08-05 15:54:46.150 Memory[1683:303] PrivateFunction3: 我是在实现方法中直接定义的方法,我也是私有变量
2014-08-05 15:54:46.150 Memory[1683:303] PrivateFunction1 PS:我是在别的头文件中定义的延展,在.m中被实现


赞助商