Потому что NSCopying
не так хорош в глубоких (рекурсивных) копиях графов объектов. Например, [NSArray copy]
копирует список объектов, а не сами объекты. Графы объектов лучше обслуживаются NSCoding
. Что в счастливом стечении обстоятельств подтверждается UIView
.
Если вы хотите скопировать пользовательский вид со свойствами, вам нужно будет поддерживать NSCoding
. Например.,
@interface SKCustomCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UILabel* nameLabel;
@property (strong, nonatomic) IBOutlet UIView* topView;
@end
static NSString* propertiesKey = @"SKCustomCellProperties";
@implementation SKCustomCell
@synthesize nameLabel;
@synthesize topView;
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder: aDecoder];
[self setValuesForKeysWithDictionary: [aDecoder decodeObjectForKey: propertiesKey]];
return self;
}
- (void) encodeWithCoder:(NSCoder *)aCoder
{
[super encodeWithCoder: aCoder];
[aCoder encodeObject: [self dictionaryWithValuesForKeys: [[NSArray alloc] initWithObjects: @"nameLabel", @"topView", nil] forKey: propertiesKey];
}
@end