2010-10-15 21 views
47

tôi có phương pháp sau đây cho lớp học của tôi mà có ý định để tải một tập tin nib và nhanh chóng các đối tượng:Mục tiêu C - Làm cách nào để sử dụng phương pháp initWithCoder?

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

Làm sao người ta tạo một đối tượng của lớp này? Đây là gì NSCoder? Làm thế nào tôi có thể tạo ra nó?

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

Trả lời

40

Bạn cũng cần phải xác định các phương pháp sau đây như sau:

- (void)encodeWithCoder:(NSCoder *)enCoder { 
    [super encodeWithCoder:enCoder]; 

    [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY]; 

    // Similarly for the other instance variables. 
    .... 
} 

Và trong phương pháp initWithCoder khởi tạo như sau:

- (id)initWithCoder:(NSCoder *)aDecoder { 

    if(self = [super initWithCoder:aDecoder]) { 
     self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY]; 

     // similarly for other instance variables 
     .... 
    } 

    return self; 
} 

Bạn có thể khởi tạo đối tượng theo cách tiêu chuẩn tức là

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

câu hỏi chính của tôi là: "do đó, dựa trên phương pháp init này làm thế nào để bạn nhanh chóng tạo ra một đối tượng của lớp này?" – aryaxt

+0

Những phương pháp này cần phải được xác định nếu bạn đang sử dụng đối tượng để tuần tự hóa và deserializing. Bạn có thể khởi tạo đối tượng bằng cách sử dụng phương thức init bình thường – SegFault

+0

cảm ơn bạn rất nhiều – pnizzle

Các vấn đề liên quan