我检测到[NSCFString copyWithZone:]的内存泄漏我做了项目搜索,只有一个地方使用了singletonclass中的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; \
} \
\
答案 0 :(得分:0)
就像评论所说,copyWithZone
部分是一个红色的鲱鱼。
查找使用NSStrings的位置,特别是复制它们的位置,例如这是内存泄漏
@property (nonatomic, copy) NSString* title;
...
self.title = [textView.title retain] // Over retained (and wont show up on the static analyzer)
self.title = @"B";