最近做一个SDK,需要暴露一些类给第三方App使用,但又不想暴露SDK内部的逻辑架构,所以有个技术需求就是,暴露类的属性,但第三方App使用SDK开发调试的时候,在Debug下看不到对应的成员变量。直接上源码吧!
//ZPTestOBJ.h
#import <Foundation/Foundation.h>
@interface ZPTestOBJ : NSObject
@property (nonatomic, copy) NSString *zpTestString;
@end
//ZPTestOBJ.m
#import "ZPTestOBJ.h"
#include "objc/runtime.h"
@implementation ZPTestOBJ {
}
- (NSString *)zpTestString {
id string = objc_getAssociatedObject(self, "zpTestString");
if ([string isKindOfClass:[NSString class]]) {
return string;
}else {
return nil;
}
}
- (void)setZpTestString:(NSString *)zpTestString {
//这里还应该判断zpTestString和老的值是否相等。。。
objc_setAssociatedObject(self, "zpTestString", zpTestString, OBJC_ASSOCIATION_COPY);
}
@end
这样我们在Debug的时候,就是下面图片这样:
test下面就看不到 zpTestString 成员了。