Objective C – 如何使用initWithCoder方法?

我有我的类打算加载一个nib文件和实例化对象的以下方法:

- (id)initWithCoder:(NSCoder*)aDecoder { if(self = [super initWithCoder:aDecoder]) { // Do something } return self; } 

如何实例化这个类的对象? 这个NSCoder是什么? 我如何创build它?

  MyClass *class = [[MyClass alloc] initWithCoder:aCoder]; 

您还需要定义以下方法,如下所示:

 - (void)encodeWithCoder:(NSCoder *)enCoder { [super encodeWithCoder:enCoder]; [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY]; // Similarly for the other instance variables. .... } 

并在initWithCoder方法中初始化如下:

 - (id)initWithCoder:(NSCoder *)aDecoder { if(self = [super initWithCoder:aDecoder]) { self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY]; // similarly for other instance variables .... } return self; } 

你可以初始化对象的标准方式,即

 CustomObject *customObject = [[CustomObject alloc] init]; 

NSCoder类用于对对象进行归档/取消归档(编组/解组,序列化/反序列化)。

这是一种在stream(如文件,套接字)上编写对象并能够在稍后或不同位置检索它们的方法。

我build议你阅读http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html