你什么时候在iPhone上使用encodeWithCoder:and initWithCoder:on?
正如我在上述主题中提出的问题所述,为了说“好的,我需要你什么时候在iPhone上使用encodeWithCoder:and initWithCoder:on?,iphone,objective-c,cocoa-touch,initwithcoder,Iphone,Objective C,Cocoa Touch,Initwithcoder,正如我在上述主题中提出的问题所述,为了说“好的,我需要encodeWithCoder:和initWithCoder:为此进行实例化”,您通常必须满足哪些要求?通常,您可以将对象状态写入NSUserDefaults,因此我很好奇专家们什么时候决定使用其中一种还是另一种?NSCoder是实现序列化的标准Cocoa方法。有关详细信息,请参见苹果的。用户默认值基本上是一个属性列表。属性列表类似于JSON,只能存储特定类型的数据——NSString、NSNumber、NSData、NSDate、NSArr
encodeWithCoder:
和initWithCoder:
为此进行实例化”,您通常必须满足哪些要求?通常,您可以将对象状态写入NSUserDefaults
,因此我很好奇专家们什么时候决定使用其中一种还是另一种?NSCoder
是实现序列化的标准Cocoa方法。有关详细信息,请参见苹果的。用户默认值基本上是一个属性列表。属性列表类似于JSON,只能存储特定类型的数据——NSString、NSNumber、NSData、NSDate、NSArray、NSDictionary。如果您尝试在用户默认值中存储任何其他内容,您将得到一个异常。属性列表也不能处理任意对象图,只能处理树
您可以始终将自定义状态转换为与属性列表兼容的数据结构,然后将其存储在用户默认值中;但是你基本上是在实现一个对象序列化机制,你也可以使用NSArchiver已经提供的更强大的机制。
initWithCoder:
由操作系统在取消归档XIB文件时使用;如果仔细观察,您会发现在XIB中创建的视图不会调用initWithFrame:
;他们将调用initWithCoder:
。每当我有某种复杂的数据要存储时,我都会使用NSCoder,而这些数据从来不用手工编辑。例如,我的应用程序将从Internet下载的货币汇率存储在NSCoder存档中。然而,这是它保存在这样一个归档文件中的唯一内容:单位定义(只能手动更改)保存在应用程序包中的一系列plist文件中,最近选择的单位和值等内容保存在NSUserDefaults中。嗨,Ben,我在使用XIBs时,没有这种方法也能过得很好。对于以编程方式构建的视图,我通常只使用loadView即可。对于使用IB构建的视图,我使用viewDidLoad{}。因此,我试图理解使用initWithCoder何时有意义: