【问题标题】:Memory management. Copy method内存管理。复制方法
【发布时间】:2009-02-21 16:43:03
【问题描述】:

我使用此代码复制和实例化我的类

//Create the copy and pass it onto edit controller
PoolFacility *poolCopy = [self.thePoolFacility copy];
self.childController.thePoolFacilityCopy = poolCopy;
[poolCopy release];

现在,当我在调试器中查看变量时,为什么某些类的字段具有相同的内存地址?他们不应该独立吗?根据苹果

NSCopying 协议声明了一种提供对象功能副本的方法。 “复制”的确切含义因类别而异,但复制必须是功能独立的对象,其值与复制时的原始值相同。

这两个实例是 poolCopy 和原来的 thePoolFacility

我的类复制方法如下:

- (id)copyWithZone:(NSZone *)zone {
    PoolFacility *copy = [[[self class] allocWithZone:zone]init];

    copy.name = [self.name copy];
    copy.type = [self.type copy];
    copy.phoneNumber = [self.phoneNumber copy];
    //make sure I get proper copies of my dictionaries
    copy.address = [self.address mutableCopy];  
    copy.webAddress = [self.webAddress copy];
    copy.prices = [self.prices mutableCopy];
    copy.pools = [self.pools mutableCopy];

    return copy;
}

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    NSString(但不是 NSMutableString)等不可变类不需要提供实际副本,因为它们无法更改。我的猜测是这些类只是在执行不应该影响复印机行为的优化。

    【讨论】:

    • 在非可变对象上是,复制与保留相同。
    猜你喜欢
    • 2012-10-14
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多