这是内存泄漏吗?

时间:2010-02-15 16:11:02

标签: iphone objective-c xcode

我有类似的东西。

initMyclass {
 if (self= [super init]) {
   classMember = [[NSMutableArray alloc] init];
 }
 return self;
}

仪器报告泄漏。

我在那里泄漏记忆? 如果没有,xcode报告错误的内存泄漏?

感谢。

3 个答案:

答案 0 :(得分:5)

仪器正在报告那里的漏洞,因为你没有在其他地方发布这个对象。您需要在该类[classMember release]方法中使用dealloc

- (void) dealloc {
  [classMember release];
  [super dealloc];
}

答案 1 :(得分:1)

这就是您应该使用属性或显式访问器的原因。

如果你有这个:

@interface myObject : NSObject
{
    NSMutableArray *classMembers;
}
@property(nonatomic, retain)  NSMutableArray *classMembers;

@end

@implementation myObject
@synthesize classMembers;

-(id) init{
    if (self=[super init]) {
        self.classMembers=[[NSMutableArray alloc] initWithCapacity:1];
    }
    return self;
}//-------------------------------------(id) init------------------------------------

-(void) dealloc{
    [classMembers release];
    [super dealloc];
}//-------------------------------------(void) dealloc------------------------------------

@end

你不会(也不应该)错过保留财产。这消除了所有泄漏和过度释放的特性。

如果属性的对象泄漏,那么您自动知道它被保留在除包含该属性的类的实例之外的另一个对象中。

答案 2 :(得分:-2)

还是实例成员?向我们展示此课程的@interface

此外,initMyClass ..或某事......不是正确的init方法。它的签名应该是以下形式:

- (id) init {
    if ((self = [super init]) != nil) {
        someInstanceVariable = [NSMutableArray new];
    }
    return self;
}

当你在这里提问时更具体。