2010-10-15 22 views
47

我有我的类中的以下方法,打算加载笔尖文件和实例化对象:Objective C - 如何使用initWithCoder方法?

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

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

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

回答

40

您还需要定义如下方法如下:

- (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]; 
+4

我的主要问题是:“所以基于这个init方法,我如何实例化这个类的一个对象?” – aryaxt 2010-10-15 15:59:31

+0

如果您使用该对象进行序列化和反序列化,则需要定义这些方法。你可以使用普通的初始化方法初始化对象 – SegFault 2010-10-15 16:02:44

+0

非常感谢你 – pnizzle 2012-10-18 04:22:19