0

Xcode アナライザー (v4.2) が私の Objective-C コードでメモリ リークが発生したと訴える理由を分析しようとして立ち往生しています。1) ディレクトリが存在しない場合は再帰的に作成し、2) あるディレクトリから別のディレクトリにファイルをそのディレクトリにコピーする NSOperation を作成しています。

NSOperation は次のように初期化されます。

- (id)initWithFullPathSource:(NSString *) mysource andFullPathCopy:(NSString *) mycopy     andNewDirectory:(NSString *) mydir withMode:(NSString *) mymode withLR:(NSString *) LR
{

     self = [super init];
     if (self) {

        [self setFullPathSource:mysource];
        [self setFullPathCopy:mycopy];
        [self setNewDirectory:mydir];
        [self setMode:mymode];
        [self setMyLR:LR];
    }

    return self;
}

添付されているのは、Xcode アナライザーが私のコードをどのように認識しているかのスクリーンショットです。この場合、なぜ私がメモリをリークしているのかを理解するのを手伝ってもらえますか? メイン ルーチンの最後に「createComponents」と「removeComponents」をリリースしているので、クリアしていると思いました。

誰かが私の問題に光を当ててくれることを願っています。ありがとう!乾杯、トロンド

ここに画像の説明を入力

4

1 に答える 1

7

new目的の c の命名規則では、単語orで始まるメソッドはcopy、呼び出し元が所有するオブジェクトを返すと想定されていることに注意してください。への呼び出しが[self newDirectory]自動解放されたオブジェクトを返す場合は、new で始まらないように名前を変更してみてください。

ここで詳細を説明する素晴らしい答えがあります:セマンティックの問題: プロパティの合成されたゲッターは、「所有された」オブジェクトを返すための Cocoa 命名規則に従います

プロパティのゲッターの名前を次のように変更することをお勧めします。

@property (strong, nonatomic, getter=theNewDirectory) NSString *newDirectory;

または、次のように呼び出します。directoryToBeCreated

于 2012-08-28T23:55:15.193 に答える