2013-05-31 46 views
-1

比如我有以下類:如何實現傳遞自定義對象作爲參數的initWith方法?

@interface PrivateInfo: NSObject 

- (instancetype)initWithPrivateInfoObject:(PrivateInfo *)pi; 

@end 

@implementation PrivateInfo 
{ 
    @private 
    NSString *name; 
    NSString *creditCardID; 
} 

- (instancetype)initWithPrivateInfoObject:(PrivateInfo *)pi 
{ 
    // how to init current object with passed pi ? 
} 

- (PrivateInfo *)copy 
{ 
    // how to create a copy of current object? 
} 
@end 

回答

2

假設ARC:

.H:

@interface PrivateInfo: NSObject <NSCopying> 

- (instancetype)initWithPrivateInfoObject:(PrivateInfo *)pi; 

@end 

.M:

@implementation PrivateInfo { 
    NSString *name; 
    NSString *creditCardID; 
} 

- (instancetype)initWithPrivateInfoObject:(PrivateInfo *)pi 
{ 
    self = [super init]; 
    if (self) { 
     name = pi->name; 
     creditCardID = pi->creditCardID; 
    } 

    return self; 
} 

- (PrivateInfo *)copyWithZone:(NSZone *)zone { 
    PrivateInfo *res = [[PrivateInfo alloc] initWithPrivateInfoObject:self]; 

    return res; 
} 

@end 

你不需要@private在用於聲明ivars的@implementation塊。並且使用NSCopying協議是要複製對象的。

相關問題