Singleton Class的copyWithZone函数导致泄漏问题

时间:2011-04-07 23:03:13

标签: iphone

我检测到[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; \
} \
 \

1 个答案:

答案 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";