/ / Vymazanie alebo šifrovanie pamäte pre NSObjects - ios, object-c, memory, nsobject

Stieranie alebo šifrovanie pamäte pre NSObjects - ios, objektív-c, pamäť, nsobject

Snažím sa prísť na to, či existuje generálspôsob, ako v podstate vymazať alebo šifrovať pamäť spojenú s NSObjects. Nezaujíma ma, či je to trochu ťažkopádne, chcem sa len uistiť, že to naozaj nebude možné prečítať.

Napríklad, ak mám

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

je to relatívne jednoduché

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

A môžem robiť podobné veci aj pre NSData. Naozaj by som však chcel mať niečo všeobecnejšie.

Pozrel som sa bez šťastia:

  • Zóny, ktoré sa zdajú byť nepoužívané.
  • Vytvorenie nadradenej triedy NSObject a odovzdanie všetkého do toho a sledovanie oblastí pamäte. Bola to však úplná bolesť.
  • Šifrovanie skutočného obsahu údajov a vynútenie dešifrovania prístupu. To sa vracia k problému vedieť niečo o každom type.
  • Šifrovanie a dešifrovanie oblastí pamäte nemôže nájsť spôsob, ako spoľahlivo zistiť, kde v pamäti sa nachádza všeobecný objekt.

Akékoľvek rady alebo nápady by boli veľmi ocenené.

odpovede:

0 pre odpoveď č. 1

Do NSObject môžete pridať kategóriu, ktorá používa odraz cez rozhranie runtime API. To sa dá použiť na vyčistenie ivarov / vlastností, dokonca aj vlastností deklarovaných ako prečítané.

Jednou nevýhodou je, že nevyjadruje určité vlastnosti, ako napríklad rámec UIView, a nie som si istý, prečo mi to chýba.

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

Veľa štastia!