/ / Effacement ou chiffrement de la mémoire pour NSObjects - ios, objective-c, mémoire, nsobject

Effacement ou chiffrement de la mémoire pour NSObjects - ios, objective-c, mémoire, nsobject

J'essaie de savoir s'il y a un généralessentiellement pour effacer ou chiffrer la mémoire associée à NSObjects. Je ne me soucie pas vraiment si c'est un peu lourd, je veux juste m'assurer que ça ne peut vraiment pas être lu.

Par exemple si j'ai un

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

c'est relativement simple à faire

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

Et je peux faire la même chose pour NSData. Mais j'aimerais vraiment avoir quelque chose de plus général.

J'ai examiné sans succès:

  • Les zones, qui semblent ne plus être utilisées.
  • Créer une classe parente de NSObject et tout transtyper vers elle, tout en gardant une trace des régions de la mémoire. Cela vient d'être une douleur complète cependant.
  • Crypter le contenu réel des données et forcer un déchiffrement sur l'accès. Cela nous ramène au problème de savoir quelque chose à propos de chaque type.
  • Le cryptage, puis le décryptage des régions de la mémoire, ne peuvent pas trouver un moyen de savoir de manière fiable où se trouve un objet général dans la mémoire.

Toute astuce ou idée serait grandement appréciée.

Réponses:

0 pour la réponse № 1

Vous pouvez ajouter une catégorie à NSObject qui utilise la réflexion via l'API d'exécution. Cela peut être utilisé pour effacer les ivars / propriétés, même les propriétés déclarées en lecture seule.

Un inconvénient est qu’il n’efface pas certaines propriétés, telles que le cadre d’un UIView, et je ne suis pas certain de la raison pour laquelle cela manque.

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

Bonne chance!