0

我现在这是一个愚蠢的问题,但我对这个案子仍然有一些了解。它是关于内存管理和引用计数的,我怀疑如果我使用复制、分配和可变复制会增加多少引用计数。这是我的代码:

这是 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.使用not设置mutableStringCode属性是一种真正的方法吗?3.在属性上设置副本后,我还需要分配吗?copyretainmutableStringCode

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

4

1 回答 1

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

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

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

于 2011-04-24T11:24:34.627 回答