gpt4 book ai didi

ios - 为 NSObjects 删除或加密内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:51 24 4
gpt4 key购买 nike

我想弄清楚是否有一种通用方法可以从根本上删除或加密与 NSObjects 关联的内存。我真的不在乎它是否有点麻烦,我只是想确保它真的无法阅读。

例如,如果我有一个

NSString* str = [[NSString alloc] initWithFormat:@"TESTING"];

做起来比较简单

unsigned char* strPtr = (unsigned char *) CFStringGetCStringPtr
((CFStringRef) str, CFStringGetSystemEncoding());
memset(strPtr, 0, [str length]);

我可以为 NSData 做类似的事情。但我真的很想有一些更通用的东西。

我调查过,没有运气:

  • 似乎不再使用的区域。
  • 创建 NSObject 的父类并将所有内容转换为它并跟踪内存区域。不过,这真是一个彻头彻尾的痛苦。
  • 加密数据的实际内容并在访问时强制解密。这又回到了了解每种类型的问题。
  • 加密然后解密内存区域,无法找到可靠地知道一般对象在内存中的位置的方法。

任何提示或想法将不胜感激。

最佳答案

您可以通过运行时 API 向使用反射的 NSObject 添加类别。这可用于清除 ivars/属性,甚至是声明为只读的属性。

一个缺点是它不清除某些属性,例如 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

祝你好运!

关于ios - 为 NSObjects 删除或加密内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17997213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com