-1

例如我有以下课程:

@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
4

1 回答 1

2

假设弧:

。H:

@interface PrivateInfo: NSObject <NSCopying>

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

@end

米:

@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@implementation块中声明 ivars。并且使用NSCopying协议是你要复制的对象。

于 2013-05-31T17:07:09.467 回答