¿Qué es la serialización? ¿Cuál es el papel de la serialización? ¿Cómo lograr la serialización en iOS?

Tabla de contenido

 

Prefacio

¿Qué es la serialización?

¿El papel de la serialización?

¿Cómo lograr la serialización en iOS?

Por ejemplo

Cosas a tener en cuenta sobre la serialización


Prefacio

En nuestro proceso de desarrollo, más o menos entraremos en contacto con el término serialización , y algunas personas han usado operaciones de serialización, pero no saben que esta operación se llama serialización.

¿Qué es la serialización?

Serialización (serialización) El proceso de convertir la información de estado de un objeto en un formulario que se puede almacenar o transmitir. Durante la serialización, el objeto escribe su estado actual en un almacenamiento temporal o persistente. Posteriormente, puede volver a crear el objeto leyendo o deserializando el estado del objeto desde el área de almacenamiento.

La serialización permite que otro código vea o modifique los datos de la instancia del objeto a los que no se puede acceder sin serialización. Para ser precisos, la serialización de ejecución de código requiere permisos especiales: SecurityPermission con el indicador SerializationFormatter especificado. Según la política predeterminada, el código descargado a través de Internet o el código de Internet no otorga este permiso; solo se otorga este permiso al código en la computadora local.

¿El papel de la serialización?

  1. Hacer persistentes los objetos personalizados en alguna forma de almacenamiento ;
  2. Pasar objetos de un lugar a otro.
  3. Haga que el programa sea más fácil de mantener.

¿Cómo lograr la serialización en iOS?

En el desarrollo real de iOS, también usaremos la serialización, mucha gente dirá, ¿no? ¿Tenemos la palabra serialización en iOS?

Entonces diré otra palabra, "Archivo", ¿lo ha usado? ¡El archivado es donde usamos la serialización en el desarrollo de iOS!

En iOS, un objeto personalizado no se puede almacenar directamente en un archivo, primero debe convertirse en una secuencia binaria. El proceso de un objeto a datos binarios se conoce generalmente como serialización del objeto (serialización), también conocido como archivo (Archive). De manera similar, el proceso de datos binarios a un objeto generalmente se denomina deserialización o anti-archivado (desarchivado).

Los protocolos NSCoding y NSCopying (no obligatorios) deben implementarse en la serialización

Por ejemplo

  • Crear una clase de persona

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCoding>

@property (copy,   nonatomic) NSString *name;
@property (copy,   nonatomic) NSString *sex;

@end

Persona.m

#import "Person.h"

@implementation Person
#if 0
//归档
- (void)encodeWithCoder:(NSCoder *)aCoder {

	[aCoder encodeObject:self.name forKey:@"name"];
	[aCoder encodeInteger:self.age forKey:@"age"];
}
//解档
- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {

	self = [super init];
	if (self) {
		self.name = [aDecoder decodeObjectForKey:@"name"];
		self.age  = [aDecoder decodeIntegerForKey:@"age"];
	}
	return self;
}
  • Operación en el controlador

  Serialización (archivo)

 Person *person = [[Person alloc] init];
	person.name = @"Frank";
	person.age  = 18;
		//这里以temp路径为例,存到temp路径下
	NSString *temp = NSTemporaryDirectory();
	NSString *filePath = [temp stringByAppendingPathComponent:@"obj.data"]; //注:保存文件的扩展名可以任意取,不影响。
	NSLog(@"%@", filePath);
		//归档
	BOOL isSuccess = [NSKeyedArchiver archiveRootObject:person toFile:filePath];
	if(isSuccess) {
			NSLog(@"归档成功");
		}else{
			NSLog(@"归档失败");
		}

 Resultados de ejecución de código:

Archivo estándar

 

Busque el archivo archivado de acuerdo con la ruta impresa

 

 

Deserialización (desarchivar)

NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"obj.data"];
	// 解档
	Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
	NSLog(@"name:%@,age:%ld",person.name,person.age);

 

Resultados de ejecución de código:

Desarchivar

 

 

Cosas a tener en cuenta sobre la serialización

  1.   La serialización solo guarda el estado del objeto, independientemente del método del objeto.
  2.   Cuando una clase padre implementa la serialización, sus subclases también implementan automáticamente la serialización y se implementan sin visualización.
  3.   Cuando un objeto de instancia hace referencia a otros objetos, el objeto al que se hace referencia también se instancia cuando el objeto se serializa.

 

 

Supongo que te gusta

Origin blog.csdn.net/zjpjay/article/details/86518545
Recomendado
Clasificación