1
我檢測到[NSCFString copyWithZone的內存泄漏:]我做了一個項目搜索,只有一個地方使用了單例類中的copyWithZone函數。Singleton類的copyWithZone函數導致泄漏問題
該宏被廣泛使用。我應該如何糾正?
#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \
\
static classname *shared##classname = nil; \
\
+ (classname *)shared##classname \
{ \
@synchronized(self) \
{ \
if (shared##classname == nil) \
{ \
shared##classname = [[self alloc] init]; \
} \
} \
\
return shared##classname; \
} \
\
+ (id)allocWithZone:(NSZone *)zone \
{ \
@synchronized(self) \
{ \
if (shared##classname == nil) \
{ \
shared##classname = [super allocWithZone:zone]; \
return shared##classname; \
} \
} \
\
return nil; \
} \
\
- (id)copyWithZone:(NSZone *)zone \
{ \
return self; \
} \
\
泄漏是在NSCFString,這是NSString的一個私人子類。你的宏可能與它無關。 'copyWithZone:'每當你調用'copy'時都會自動調用,所以你應該在你的項目中搜索你複製NSString(或者NSMutableString)而不釋放舊字符串的地方。 – ughoavgfhw 2011-04-07 23:09:20