在没有泄漏内存的情况下,在Objective C中初始化实例变量的正确方法是什么?

kum*_*mar 2 memory-leaks objective-c iphone-sdk-3.0

我有一个这样的课:

@interface MyCollection : NSObject {
    NSMutableDictionary *data;
}

在它的实现中,我有一个方法来像这样初始化它:

- (id) init {
    if(self = [super init])
    {
        self.data = [[NSMutableDictionary alloc] init];
    }
    return self;
}

现在,当我在我的代码中创建此类的对象时,如下所示:

MyCollection *c = [[MyCollection alloc] init];

...此时Leaks实用程序显示我在尝试设置实例变量的行上的init函数中有内存泄漏.我对Objective C&Iphone完全不熟悉,我不能在这里得到什么问题.我已经阅读了内存管理指南和所有内容,但我认为我在这里遗漏了一些相当严重的内容.

任何帮助将不胜感激.谢谢你的时间.

Mat*_*uch 6

你在用self.data =.所以最有可能是财产.如果您使用它,它很可能是复制或保留您的对象的属性.
通过电话

 self.data = [[NSMutableDictionary alloc] init];
Run Code Online (Sandbox Code Playgroud)

由于alloc,NSMutableDictionary的保留计数增加,如果数据的属性具有保留或复制语句,则保留计数会再次增加.

你可以写data = [[NSMutableDictionary alloc] init];self.data = [NSMutableDictionary dictionary].这样只会增加一次保留计数.

并且不要忘记在dealloc中释放对象.