我正在试图弄清楚是否存在一种基本上擦除或加密与NSObject相关联的内存的通用方法。我真的不在乎它是否有点麻烦,我只是想确保它真的无法读取。
例如,如果我有
NSString* str = [[NSString alloc] initWithFormat:@"TESTING"];
做起来相对简单
unsigned char* strPtr = (unsigned char *) CFStringGetCStringPtr
((CFStringRef) str, CFStringGetSystemEncoding());
memset(strPtr, 0, [str length]);
我可以为NSData做类似的事情。但我真的想要更通用的东西。
我已经调查过,没有运气:
非常感谢任何提示或想法。
答案 0 :(得分:0)
您可以向通过运行时API使用反射的NSObject添加类别。这可用于清除ivars / properties,甚至是声明为readonly的属性。
一个缺点是它没有清除某些属性,例如UIView的框架,我不确定它为什么会错过它。
NSObject的+ Scrub.h:
@interface NSObject (Scrub)
- (void) scrub;
@end
NSObject的+ Scrub.m:
#import "NSObject+Scrub.h"
#import <objc/runtime.h>
@implementation NSObject (Scrub)
- (void) scrub
{
Class myClass = [self class];
unsigned int count;
//Scrub the Ivars
Ivar *ivars = class_copyIvarList(myClass, &count);
for (int i = 0; i < count ; i++) {
Ivar ivar = ivars[i];
object_setIvar(self, ivar, nil);
}
free(ivars);
}
@end
祝你好运!