OC SDK framework如何开放接口和隐藏接口、属性,以及隐藏部分接口、属性

16 篇文章 0 订阅
4 篇文章 0 订阅

注:属性和接口的方法一致,以接口为例

开放接口:

OC的文件分为.h和.m两种,.h文件,也就是头文件,这里有个


@interface test : NSObject
-(void)test;
@end

这里面声明的所有方法在该项目里的test对象都可以调用,也就是public的意思,但是不同的项目如果也想呢。也就是framework开放出去。也很简单。把你想开放出去的接口文件扔这里,如果有人引用了你的framework,那么该文件就可以被他引用。需要注意的是,该文件里的所有接口都会被开放出去。

 

 

隐藏接口

隐藏接口有两种方式

1.把你写的方法写在.m文件中。也就是不写方法的声明,这里面的方法就是外面不可调用的,也就是private的方法。但是同样的,工程内的其他类中的对象,也无法调用该接口

2.和开放接口一样,把方法的声明写在.h文件,但是相关文件不放在public中。这样就是本工程/包内部可用,但是包外部不可用。

隐藏和开发部分接口

开发的时候经常会遇到一个问题,就是我有的类,包内和包外都是需要使用的,但是该类有的方法包内可用,包外有不可用。也就是实现一个public类中既有包外可见的方法,又要有仅包内可见的方法。那么所有声明放在.h中,放在public,就是不对的,因为不想可见的方法也会被可见。但不放public中,包外又不可见所有的方法了,如果方法不在.h中声明,包内该方法也不可见了。

那么可以用扩展来完成该操作。也就是说,新创建一个文件

 

 注意,这里选extension,class选你需要扩展的类。需要注意的是,这里生成的新的文件,叫做:”类名+你起的file名",而不是单纯的“file名"

这会生成一个新的类,该类的功能就是扩展你的头文件,也就是说,你的.m文件对应了两个.h文件。这两个.h文件对于点m是等价的。而且扩展中的所有方法,是需要再.m中实现的。

这样的话,你原本的那个.h文件就可以放你希望公开的接口,然后放在public中。不想对包外公开,又想对包内公开的接口放在新生成的扩展文件中,再把文件放在private中,就实现某个类的部分接口可见。部分接口不可见。

补充

OC有一个关键字,叫 @package 这个其实就是一个包内可见,包外不可见的关键字,被@package 修饰的类成员变量,就可以实现上面的功能,需要注意的是,@package 只能修饰类成员变量,不可修饰属性和方法。

用法如下

@interface test : NSObject
{
    @package NSString *log;  //语法正确
    
}
@package @property(nonatomic,readonly) NSString *log; //语法错误

@package
-(void)test; //语法错误

@end

 

再补充一个

有的属性,你希望对外只读,对类内是读写的。也就是说,该类.m内是可以修改改值的,其他的类生成的该类对象都是不可修改。可以这么实现

//.h文件中
@interface test : NSObject

@property(nonatomic,readonly) NSString *log; 


@end


//.m文件中
@interface test()

@property(nonatomic,readwrite) NSString *log; 


@end

需要注意的是,变量名和类型要一致,不同的话就是两个不同的变量了。也就是说,@property()内的每个参数都可以修改,让类外和类内的同一个属性权限不一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值