iOS SDK 封装和开发实战iOS SDK 开发SDK开发

iOS SDK 开发 -- 控制接口暴露

2016-11-14  本文已影响1000人  YxxxHao

在 SDK 开发中,经常会碰到一个问题,假设 SDKUser.h 是 SDK 对外暴露的 Header, 其中 SDKUser 类型中的 uid 属性是不对外暴露的,但在 SDK 中的某些私有类需要获取这个属性(或方法),这个时候我们需要怎么处理呢?uid 属性是一个对 SDK 外是不可以见的,但对 SDK 内是可见的,这种情况,就可以使用 Category 来解决这个问题:

SDKUser.h 对外暴露的头文件:

@interface SDKUser : NSObject

@property(nonatomic, copy, readonly) NSString *username;

@end

在对外暴露的 Header 中,如果我们不希望外部来写这个对象的时候,我们需要将属性设置为只读属性,但是我们又需要在对内支持读写,这时我们需要在实现文件里重新设置该属性支持读写操作。

SDKUser.m 实现文件:

#import "SDKUser.h"

@interface SDKUser()

// 对外属性
@property(nonatomic, copy, readwrite) NSString *username;

// 只对内属性
@property(nonatomic, copy, readwrite) NSString *uid;

@end

@implementation SDKUser

@end

因为 username 属性在 SDK 内是支持读写操作的,所以需要设置为 readwrite,而 uid 这个属性这里是不希望暴露给用户的,所以我们将该属性定义在 .m 文件里中,但是定义 .m 文件里时,只支持类内的访问,如果 SDK 内的其它私有类想访问就无法访问到这个属性了。

这种情况下,我们可以对 SDKUser 这个类进行 Category,并将 SDK 里的相关私有属性(或方法)实现在里面:

#import "SDKUser.h"

@interface SDKUser (SDKInner)

// 基本属性
@property(nonatomic, copy) NSString *uid;
@property(nonatomic, copy, readonly) NSString *username;

@end


--------------------------------


#import "SDKUser+SDKInner.h"

@implementation SDKUser (SDKInner)

@end

这样的话 SDK 内的私有类就可以访问 SDKUser 里面的 uid 属性,并且又不会暴露给开发者。

最后,在这里卖个广告,我创建了一个 iOS SDK 开发的群,群号:127548419,有兴趣的就加下。

上一篇下一篇

猜你喜欢

热点阅读