- (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;
}
Can anyone see any memory leaks?
Here's the property types:
NSString *name;
NSString *type;
NSMutableDictionary *address;
NSString *phoneNumber;
NSString *webAddress;
NSMutableArray *prices;
NSMutableArray *pools;
Here are the property declarations:
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *type;
@property (nonatomic, copy) NSString *phoneNumber;
@property (nonatomic, retain) NSMutableDictionary *address;
@property (nonatomic, copy) NSString *webAddress;
@property (nonatomic, retain) NSMutableArray *prices;
@property (nonatomic, retain) NSMutableArray *pools;
From stackoverflow
-
The properties defined as copy and not retain will have an extra copy when set as below (your code)
copy.name = [self.name copy]; copy.type = [self.type copy]; copy.phoneNumber = [self.phoneNumber copy]; copy.webAddress = [self.webAddress copy];it should be sufficient to only write them as
copy.name = self.name; copy.type = self.type; copy.phoneNumber = self.phoneNumber; copy.webAddress = self.webAddress;Dan Morgan : But wont this defeat the point of a copy method? I'll be duplicating the class but the variables will point to the same objects? Or will this give me 2 completely independent objects?epatel : The "@property (..., copy)" means that a copy is created when you use the dot-notation. The previous value will be sent a release.Peter Hosey : Dan Morgan: The synthesized accessors will copy the objects for you because you declared the properties as `@property(copy)`. If you copy the objects yourself, the accessors will copy those copies. Since you aren't releasing those intermediate copies, they are all leaked.Nikolai Ruhe : All copied objects will leak. It does not depend on the property type (copy or retain). -
This almost certainly leaks like a sieve. You need to provide your @property and other method declarations for us to recommend the best way to fix it.
0 comments:
Post a Comment