引用次数增加了多少

时间:2011-04-24 10:14:56

标签: objective-c reference count malloc nsmutablestring

我现在这是一个愚蠢的问题,但我仍然对这个案子有一些不太了解。它是关于内存管理和引用计数,我有一些疑问,如果我使用copy,alloc和mutable copy,将增加多少引用计数。这是我的代码:

这是myController.h:

#import <UIKit/UIKit.h>


@interface myController : UIViewController {
NSMutableString *mutableStringCode;
}
@property (nonatomic, copy) NSMutableString *mutableStringCode;
@end

这是myController.m

#import "myController.h"


@implementation myController

-(void)viewDidLoad{
    mutableStringCode = [[NSMutableStringCode alloc]init];
    [self refresh];

}


-(void)refresh{
    NSMutableString *myFileContents = [NSMutableString stringWithContentsOfFile:localPath encoding:NSUTF8StringEncoding error:&error];

    mutableStringCode = [myFileContents mutableCopy]; 

    //another code

    myFileContents = nil;
}


-(void)dealloc{
    [mutableStringCode release];

    [super dealloc];

}

@end

在这段代码中,我有些疑惑: 1. mutableStringCode中引用计数增加了多少? 2.使用mutableStringCode而不是copy设置retain属性的真实方法是什么? 3.我在财产上设置副本后仍需要分配mutableStringCode吗?

有人可以向我描述一下吗? 谢谢

1 个答案:

答案 0 :(得分:0)

  • 如果你只是创建一个myController类的实例,然后释放它,一切都会好的。 mutableStringCode将在viewDidLoad中创建(如果它将被调用)并在dealloc中释放。这是因为alloc保留了对象。
  • 每次调用refresh时,都会发生以下情况:
    • 你创建了自动释放的可变字符串myFileContents。
    • 将其复制到mutableStringCode,保留它(复制保留对象)。

我在这里看到的主要问题是在刷新期间你没有释放已经创建的mutableStringCode。所以它保留在内存中(通常是内存泄漏)。

您可以尝试使用Analyze或使用Instruments的Leaks工具捕获这些类型的内存泄漏。