2009-02-21 76 views
0

我用这个代码我的课内存管理。 Copy方法

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

现在的复制和实例时,我认为在调试器中的变量,怎么来的一些类的字段具有相同的内存地址的?他们不应该独立吗?根据Apple

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

的两个实例是poolCopy &原thePoolFacility

alt text

我的类的复制方法是这样的:

- (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; 
} 

回答

6

不可变类,如NSString的(但不是的NSMutableString)唐不需要提供实际的副本,因为它们不能被改变。我的猜测是,这些类只是简单地进行优化,不应该影响复印机的行为。

+0

对不可变对象是,复制与保留相同。 – 2009-02-21 20:12:17