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. notmutableStringCodeを使用してプロパティを設定する本当の方法ですか?3.プロパティにコピーを設定した後でも、それを割り当てる必要がありますか?copyretainmutableStringCode

誰かが私にそれを説明できますか?ありがとうございました

4

1 に答える 1

0
  • myControllerクラスのインスタンスを作成し、それを解放するだけで、すべてが正常になります。mutableStringCodeはviewDidLoad(呼び出される場合)で作成され、deallocでリリースされます。これは、allocがオブジェクトを保持しているために発生します。
  • リフレッシュを呼び出すたびに、次のことが起こります。
    • 自動解放された可変文字列myFileContentsを作成します。
    • それをmutableStringCodeにコピーし、保持します(コピーはオブジェクトを保持します)。

ここで私が目にする主な問題は、更新中に、作成済みのmutableStringCodeを解放していないことです。したがって、メモリに保持されたままになります(通常のメモリリークです)。

これらのタイプのメモリリークは、AnalyzeまたはInstrumentsのLeaksツールを使用してキャッチすることができます。

于 2011-04-24T11:24:34.627 に答える