NSArray描述,反之亦然

V-X*_*eme 1 iphone objective-c ios

我有NSMutableArray像:

NSMutableArray *x=[[NSMutableArray alloc]initWithObjects:@"a",@"b",@"c",@"d", nil];
NSLog(@"%@",x.description);
Run Code Online (Sandbox Code Playgroud)

从描述中我得到以下结果:

(
    a,
    b,
    c,
    d
)
Run Code Online (Sandbox Code Playgroud)

我想再次从描述中重新创建数组是否可能?

Mar*_*n R 6

在所有情况下都无法可靠地工作.例如,你不知道是否

(
    123
)
Run Code Online (Sandbox Code Playgroud)

表示包含字符串或数字的数组.

补充:实际上一种方法可以将描述转换回数组对象(但由于上面给出的原因,它并不总是返回相同的数组).该 description方法NSArrayNSDictionary 使用旧式ASCII属性列表可使用读取格式NSPropertyListSerialization:

NSArray *a1 = @[@"123", @456];
NSString *desc = [a1 description];

NSData *d = [desc dataUsingEncoding:NSUTF8StringEncoding];
NSArray *a2 = [NSPropertyListSerialization propertyListWithData:d
                                                        options:0
                                                         format:NULL
                                                          error:NULL];
NSLog(@"%@", a2);
NSLog(@"a1[1] is a %@", [a1[1] class]);
NSLog(@"a2[1] is a %@", [a2[1] class]);
Run Code Online (Sandbox Code Playgroud)

输出:

(
    123,
    456
)
a1[1] is a __NSCFNumber
a2[1] is a __NSCFString

正如你所看到的,数组a2看起来像a1,但第二个元素456,NSNumber原来是,已被回读为NSString.

所以你应该description只用作调试工具.在其他答案和评论中已经提到了创建可逆的人类可读描述或存档的更好方法.